CN117390337B - 消息发送方法、装置、中间件及介质 - Google Patents
消息发送方法、装置、中间件及介质 Download PDFInfo
- Publication number
- CN117390337B CN117390337B CN202311694700.0A CN202311694700A CN117390337B CN 117390337 B CN117390337 B CN 117390337B CN 202311694700 A CN202311694700 A CN 202311694700A CN 117390337 B CN117390337 B CN 117390337B
- Authority
- CN
- China
- Prior art keywords
- consumer
- message
- platform
- platforms
- sending
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000012545 processing Methods 0.000 claims abstract description 21
- 238000011161 development Methods 0.000 claims description 36
- 230000004044 response Effects 0.000 claims description 13
- 230000002860 competitive effect Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 5
- 230000018109 developmental process Effects 0.000 description 33
- 238000010586 diagram Methods 0.000 description 21
- 238000009616 inductively coupled plasma Methods 0.000 description 11
- 235000010384 tocopherol Nutrition 0.000 description 11
- 235000019731 tricalcium phosphate Nutrition 0.000 description 11
- 238000012546 transfer Methods 0.000 description 8
- 238000005192 partition Methods 0.000 description 7
- 238000004590 computer program Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 4
- 230000008140 language development Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 210000001503 joint Anatomy 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请公开了一种消息发送方法、装置、中间件及介质,方法包括:接收生产者平台发送的第一消息,第一消息是生产者平台对获取到的调用请求进行序列化处理得到的,调用请求用于调用至少一个消费者平台进行业务处理,第一消息携带第一主题标识;将第一消息存储在第一主题标识对应的第一主题中,中间件包括多个主题,每个主题对应不同的主题标识;向订阅第一主题的消费者平台发送第一消息。通过上述过程,可以通过中间件对生产者平台发送给消费者平台的消息进行缓存,使得生产者平台对消费者平台的调用基于异步方式实现,并且可以提高生产者平台向消费者平台发送消息的并发量,可避免消息发送阻塞,提高平台间的业务调用效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种消息发送方法、装置、中间件及介质。
背景技术
不同的平台间需要通过业务调用来协作完成某些功能,例如,平台A需要通过调用平台B来对数据库进行查询,得到查询结果。目前,平台间的业务调用通常都是通过接口实现,平台间接口调用本质上是利用超文本传输协议(Hypertext Transfer Protocol,HTTP)发起请求,在服务器创建传输控制协议(Transmission Control Protocol,TCP)连接进行数据从平台A到平台B的传递。当处于高并发的情况下往往会因为受制于服务器的请求限制(Linux最大请求限制65535),导致并发量无法提高造成TCP阻塞,影响平台间的业务调用效率。
发明内容
本申请提供一种消息发送方法、装置、中间件及介质,可以在平台间设置中间件,由中间件对平台间发送的消息进行缓存,使得平台间的调用基于异步方式实现,消息数量不再受制于服务器的请求限制,提高平台间的业务调用效率。
第一方面,本申请提供一种消息发送方法,应用于中间件,包括:
接收生产者平台发送的第一消息,所述第一消息携带第一主题标识,所述第一消息是所述生产者平台对获取到的调用请求进行序列化处理得到的,所述调用请求用于调用至少一个消费者平台进行业务处理;
将所述第一消息存储在所述第一主题标识对应的第一主题中,所述中间件包括多个主题,每个主题对应不同的主题标识;
向订阅所述第一主题的消费者平台发送所述第一消息。
本实施例中,中间件可以对生产者平台发送的第一消息进行缓存,缓存的消息数量取决于中间件的存储容量,由于中间件的存储容量可以根据实际需要进行扩充,使得中间件可以缓存的消息数量也可以根据实际需要进行扩充。也就是说,可以通过中间件对生产者平台发送给消费者平台的消息进行缓存,使得生产者平台对消费者平台的调用基于异步方式实现,并且可以提高生产者平台向消费者平台发送消息的并发量,可避免消息发送阻塞,提高平台间的业务调用效率。
在本申请一实施例中,在所述将所述第一消息存储在所述第一主题标识对应的第一主题中之后,所述向订阅所述第一主题的消费者平台发送所述第一消息之前,所述方法还包括:
向订阅所述第一主题的消费者平台发送通知消息,所述通知消息用于指示所述第一主题中包括所述第一消息;
接收目标消费者平台发送的用于获取第一消息的消息获取请求,所述目标消费者平台为订阅所述第一主题的消费者平台中的至少一个;
所述向订阅所述第一主题的消费者平台发送所述第一消息,包括:
响应于所述消息获取请求,向所述目标消费者平台发送所述第一消息。
在本实施例中,中间件可以将第一消息发送给一个或多个消费者平台,使得第一消息在由中间件发送给目标消费者平台时的并发量不受限制,可以提高对目标消费者平台的业务调用效率。
在本申请一实施例中,所述目标消费者平台的数量为多个,所述消息获取请求包括消费者平台所属的群组标识;
所述响应于所述消息获取请求,向所述目标消费者平台发送所述第一消息,包括:
响应于所述消息获取请求,根据所述群组标识,确定多个目标消费者平台所属的消费者群组;
在所述消费者群组包括第一消费者群组,且所述第一消费者群组包括所述多个目标消费者平台中的至少两个的情况下,向所述第一消费者群组中的一个目标消费者平台发送所述第一消息;
在所述消费者群组包括第二消费者群组,且所述第二消费者群组包括一个目标消费者平台的情况下,向所述第二消费者群组中的目标消费者平台发送所述第一消息。
本实施例中,将不同的消费者平台归属在不同消费者群组中,这些消费者平台就可以消费同一消息,可以实现消息并发处理。将不同的消费者平台归属在相同消费者群组中,只允许同一消费者群组中的一个消费者平台对同一消息进行消费,避免重复消费。
在本申请一实施例中,向所述第一消费者群组中的一个目标消费者平台发送所述第一消息之前,所述方法还包括:
确定先前未向所述第一消费者群组中的任一消费者平台发送过所述第一消息。
在本实施例中,中间件在向第一消费者群组中的一个目标消费者平台发送第一消息之前,还需要判断先前是否向第一消费者群组中的任一消费者平台发送过第一消息,若否,则向第一消费者群组中的一个目标消费者平台发送第一消息,进一步避免重复消费。
在本申请一实施例中,所述消费者平台的数量为多个,多个所述消费者平台采用至少两种开发语言开发得到。
本实施例中,序列化处理后得到的第一消息可以被各个开发语言开发的消费者平台识别,对于生产者平台来说,在调用多个开发语言开发的消费者平台时,不再需要根据消费者平台的开发语言开发新的接口,大大节省开发工作量。
第二方面,本申请实施例提供一种消息发送装置,包括:
第一接收模块,用于接收生产者平台发送的第一消息,所述第一消息携带第一主题标识,所述第一消息是所述生产者平台对获取到的调用请求进行序列化处理得到的,所述调用请求用于调用至少一个消费者平台进行业务处理;
存储模块,用于将所述第一消息存储在所述第一主题标识对应的第一主题中,所述中间件包括多个主题,每个主题对应不同的主题标识;
第一发送模块,用于向订阅所述第一主题的消费者平台发送所述第一消息。
本实施例中,中间件可以对生产者平台发送的第一消息进行缓存,缓存的消息数量取决于中间件的存储容量,由于中间件的存储容量可以根据实际需要进行扩充,使得中间件可以缓存的消息数量也可以根据实际需要进行扩充。也就是说,可以通过中间件对生产者平台发送给消费者平台的消息进行缓存,使得生产者平台对消费者平台的调用基于异步方式实现,并且可以提高生产者平台向消费者平台发送消息的并发量,可避免消息发送阻塞,提高平台间的业务调用效率。
在本申请一实施例中,所述装置还包括:
第二发送模块,用于向订阅所述第一主题的消费者平台发送通知消息,所述通知消息用于指示所述第一主题中包括所述第一消息;
第二接收模块,用于接收目标消费者平台发送的用于获取第一消息的消息获取请求,所述目标消费者平台为订阅所述第一主题的消费者平台中的至少一个;
所述第一发送模块,用于响应于所述消息获取请求,向所述目标消费者平台发送所述第一消息。
在本实施例中,中间件可以将第一消息发送给一个或多个消费者平台,使得第一消息在由中间件发送给目标消费者平台时的并发量不受限制,可以提高对目标消费者平台的业务调用效率。
在本申请一实施例中,所述目标消费者平台的数量为多个,所述消息获取请求包括消费者平台所属的群组标识;
所述第一发送模块,包括:
确定子模块,用于响应于所述消息获取请求,根据所述群组标识,确定多个目标消费者平台所属的消费者群组;
第一发送子模块,用于在所述消费者群组包括第一消费者群组,且所述第一消费者群组包括所述多个目标消费者平台中的至少两个的情况下,向所述第一消费者群组中的一个目标消费者平台发送所述第一消息;
第二发送子模块,用于在所述消费者群组包括第二消费者群组,且所述第二消费者群组包括一个目标消费者平台的情况下,向所述第二消费者群组中的目标消费者平台发送所述第一消息。
本实施例中,将不同的消费者平台归属在不同消费者群组中,这些消费者平台就可以消费同一消息,可以实现消息并发处理。将不同的消费者平台归属在相同消费者群组中,只允许同一消费者群组中的一个消费者平台对同一消息进行消费,避免重复消费。
在本申请一实施例中,所述装置还包括:
确定模块,用于确定先前未向所述第一消费者群组中的任一消费者平台发送过所述第一消息。
在本实施例中,中间件在向第一消费者群组中的一个目标消费者平台发送第一消息之前,还需要判断先前是否向第一消费者群组中的任一消费者平台发送过第一消息,若否,则向第一消费者群组中的一个目标消费者平台发送第一消息,进一步避免重复消费。
在本申请一实施例中,所述消费者平台的数量为多个,多个所述消费者平台采用至少两种开发语言开发得到。
本实施例中,通过中间件在生产者平台和消费者平台之间缓存消息,消息并不需要基于消费者平台的开发语言设置,可以节省开发工作量。
第三方面,本申请实施例提供一种中间件,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面所述的消息发送方法的步骤。
第四方面,本申请实施例提供一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的消息发送方法的步骤。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
下面将参考附图来描述本申请示例性实施例的特征、优点和技术效果。
图1为传统接口模式示意图;
图2为本申请实施例提供的消息发送方法的流程示意图;
图3所示为本申请实施例提供的消息发送方法的整体架构图;
图4所示为本申请实施例提供的消息发送方法的模式示意图;
图5所示为传统模式下***A和***B的不同开发语言的接口实现示意图;
图6所示为本申请实施例提供的***A和***B的交互模式示意图;
图7所示为生产者平台和消费者平台之间的关系示意图;
图8为本申请实施例提供的消息发送装置的结构示意图;
图9为本申请实施例提供的中间件的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
除非另有定义,本申请所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同;本申请中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序或主次关系。
图1所示为传统接口模式,平台间接口调用本质上是利用HTTP发起请求,在服务端创建TCP连接进行数据从平台A(也可称为***A)到平台B(也可称为***B)的传递。而当处于高并发的情况下往往会因为受制约于服务器的请求限制(Linux最大请求限制65535)导致并发量无法提高,造成TCP阻塞影响接口数据传递效率。且由于各个开发平台开发语言与开发平台的限制,平台A到平台B的传递接口对于不同语言的开发平台并不通用,这就造成了相同的功能接口,在JAVA平台对接一次后,如果C++也有这个需求,就需要针对C++又开发一次,而开发语言几十上百种,对于开发人员而言这是一比很大工作量开销。再者,由于使用传统模式请求/响应式接口,对于接口调用者而言需要在己方***嵌入对方接口的相关程序与代码,将两个***耦合起来,往往造成平台A出现故障,导致平台B也出现故障,不符合程序开发过程中高内聚低耦合的要求。
本申请实施例提供的消息发送方法可以解决上述问题。
图2为本申请一实施例提供的消息发送方法的流程示意图,如图2所示,所述方法应用于中间件,包括步骤101-步骤103,其中:
步骤101,接收生产者平台发送的第一消息,所述第一消息携带第一主题标识,所述第一消息是所述生产者平台对获取到的调用请求进行序列化处理得到的,所述调用请求用于调用至少一个消费者平台进行业务处理。
可以预先设置配置信息,配置信息包括中间件的多个主题,以及每个主题对应的主题标识,每个主题对应的主题标识不同。生产者平台在发送第一消息之前,可以根据第一消息的类型或者第一消息的用途,确定第一消息的主题标识,例如,若第一消息的用途为对数据库进行查询,则确定第一主题标识可以为001,生产者平台在确定第一主题标识之后,将第一主题标识添加到第一消息中,发送给中间件。示例性地,中间件可以采用kafka中间件。第一消息可以是HTTP消息,在此不做限定。
生产者平台对调用请求进行序列化处理,得到第一消息,第一消息可以是采用json语言描述。序列化处理后得到的第一消息可以被各个开发语言开发的消费者平台识别,对于生产者平台来说,在调用多个开发语言开发的消费者平台时,不再需要根据消费者平台的开发语言开发新的接口,大大节省开发工作量。
步骤102,将所述第一消息存储在所述第一主题标识对应的第一主题中,所述中间件包括多个主题,每个主题对应不同的主题标识。
中间件在收到第一消息后,对第一消息进行解析,获取到第一主题标识,将第一消息存储在第一主题标识对应的第一主题中,具体地,存储在第一主题对应的分区中,每个分区可以视为一个最小的存储单元。
中间件可以接收生产者平台发送的多条消息,并根据每条消息中携带的主题标识,将消息存储在主题标识对应的主题中,由中间件对生产者平台发送的消息进行缓存。
步骤103,向订阅所述第一主题的消费者平台发送所述第一消息。
消费者平台的数量可以是一个或者多个,这些消费者平台均可以对第一主题进行订阅,在订阅第一主题之后,中间件在收到第一消息,并将第一消息存储在第一主题之后,会触发向订阅所述第一主题的消费者平台发送所述第一消息,示例性地,中间件可以主动向订阅第一主题的消费者平台推送第一消息,中间件也可以向订阅第一主题的消费者平台发送通知消息,以告知消费者平台中间件收到了第一消息,触发消费者平台主动获取第一消息。
消费者平台在获取到第一消息后,可以基于第一消息进行响应,示例性地,若第一消息为用于查询数据库的消息,则消费者平台在获取到第一消息后,会对数据库进行查询,得到查询结果,并将查询结果反馈给生产者平台,在此不做限定。
上述实施例中,中间件可以对生产者平台发送的第一消息进行缓存,缓存的消息数量取决于中间件的存储容量,由于中间件的存储容量可以根据实际需要进行扩充,使得中间件可以缓存的消息数量也可以根据实际需要进行扩充。也就是说,可以通过中间件对生产者平台发送给消费者平台的消息进行缓存,使得生产者平台对消费者平台的调用基于异步方式实现,并且可以提高生产者平台向消费者平台发送消息的并发量,避免消息发送阻塞,提高平台间的业务调用效率。
在本申请一实施例中,在所述将所述第一消息存储在所述第一主题标识对应的第一主题中之后,所述向订阅所述第一主题的消费者平台发送所述第一消息之前,所述方法还包括:
向订阅所述第一主题的消费者平台发送通知消息,所述通知消息用于指示所述第一主题中包括所述第一消息;
接收目标消费者平台发送的用于获取第一消息的消息获取请求,所述目标消费者平台为订阅所述第一主题的消费者平台中的至少一个;
所述向订阅所述第一主题的消费者平台发送所述第一消息,包括:
响应于所述消息获取请求,向所述目标消费者平台发送所述第一消息。
在本实施例中,中间件在将第一消息存储在第一主题中之后,向订阅第一主题的消费者平台发送通知消息,接收到通知消息的消费者平台可以根据自身情况,确定是否向中间件发送消息获取请求,目标消费者平台可以是订阅第一主题的消费者平台中的至少一个。
例如,若有消费者平台A和消费者平台B,这两个消费者平台都获取到通知消息,但是这两个消费者平台互为竞争关系,只有其中一个消费者平台能向中间件发送消息获取请求,此种情况下,只有竞争获取的消费者平台才会向中间件发送消息获取请求。
又例如,若有消费者平台A和消费者平台B,这两个消费者平台都获取到通知消息,但是这两个消费者平台不是竞争关系,每个消费者平台都能向中间件发送消息获取请求,此种情况下,两个消费者平台都会向中间件发送消息获取请求。
中间件在接收到目标消费者平台发送的消息获取请求之后,向目标消费者平台发送第一消息,目标消费者平台可以对接收到的第一消息进行响应。
在本实施例中,中间件可以将第一消息发送给一个或多个消费者平台,使得第一消息在由中间件发送给目标消费者平台时的并发量不受限制,可以提高对目标消费者平台的业务调用效率。
在本申请又一实施例中,所述目标消费者平台的数量为多个,所述消息获取请求包括消费者平台所属的群组标识;
所述响应于所述消息获取请求,向所述目标消费者平台发送所述第一消息,包括:
响应于所述消息获取请求,根据所述群组标识,确定多个目标消费者平台所属的消费者群组;
在所述消费者群组包括第一消费者群组,且所述第一消费者群组包括所述多个目标消费者平台中的至少两个的情况下,向所述第一消费者群组中的一个目标消费者平台发送所述第一消息;
在所述消费者群组包括第二消费者群组,且所述第二消费者群组包括一个目标消费者平台的情况下,向所述第二消费者群组中的目标消费者平台发送所述第一消息。
具体地,每个目标消费者平台发送的消息获取请求均为包括对应的目标消费者平台所属的群组标识,例如,若目标消费者平台有3个,分别是消费者平台A、消费者平台B和消费者平台C,其中,消费者平台A和消费者平台B属于第一消费者群组G1,消费者平台C属于第二消费者群组G2,则消费者平台A和消费者平台B各自发送的消息获取请求均包括第一消费者群组的群组标识G1,消费者平台C发送的消息获取请求包括第二消费者群组的群组标识G2。
对于第一消费者群组G1来说,包括2个消费者平台,这两个消费者平台互为竞争关系,只会有一个消费者平台能获取到第一消息,例如,这两个消费者平台竞争,竞争获胜方获取到第一消息。
对于第二消费者群组G2来说,包括1个消费者平台,中间件向该消费者平台发送第一消息。
也就是说,位于相同消费者群组中的消费者平台互为竞争关系,每组消费者群组只会有一个消费者平台能获取到第一消息。基于次,可以将互为竞争关系的消费者平台分在相同的消费者群组,将没有竞争关系的消费者平台分在不相同的消费者群组。
示例性地,可以将基于相同语言进行开发的消费者平台分在不相同的消费者群组,或者,将基于不同语言进行开发的消费者平台分在不相同的消费者群组,在此不做限定。
需要说明的是,在各个消费者平台的代码内需要指定该消费者平台归属的消费者群组,要消费哪个分区。生产者平台也需要在生产消息时指定消息的存放主题以及主题下的分区,以保证消息消费的唯一性,不重复消费。
本实施例中,将不同的消费者平台归属在不同消费者群组中,这些消费者平台就可以消费同一消息,可以实现消息并发处理。将不同的消费者平台归属在相同消费者群组中,只允许同一消费者群组中的一个消费者平台对同一消息进行消费,避免重复消费。
在本申请又一实施例中,向所述第一消费者群组中的一个目标消费者平台发送所述第一消息之前,所述方法还包括:
确定先前未向所述第一消费者群组中的任一消费者平台发送过所述第一消息。
在本实施例中,中间件在向第一消费者群组中的一个目标消费者平台发送第一消息之前,还需要判断先前是否向第一消费者群组中的任一消费者平台发送过第一消息,若否,则向第一消费者群组中的一个目标消费者平台发送第一消息,进一步避免重复消费。
在本申请又一实施例中,所述消费者平台的数量为多个,多个所述消费者平台采用至少两种开发语言开发得到。通过中间件在生产者平台和消费者平台之间缓存消息,消息并不需要基于消费者平台的开发语言设置,可以节省开发工作量。
图3所示为本申请实施例提供的一种消息发送方法的整体架构图,如图1所示,包括如下三个部分:
中间件包括主题(Topic):Topic 是一个存储消息的逻辑概念,可以理解为是一个消息的集合,业务***对接接口其实传递的就是消息,区别只是在于消息类型的不同,比如String,Map,List等。每条发送到中间件的消息都会自带一个类别,表明要将消息发送到哪个 Topic 上。在存储方面,不同的 Topic 的消息是分开存储的,每个 Topic 可以有多个生产者向他发送消息,也可以有多个消费者去消费同一个Topic中的消息。
生产者平台(Producer):负责生产消息,一般由业务***负责生产消息。一个消息生产者会把业务应用***里产生的消息发送到中间件。
消费者平台(Consumer):负责消费消息,一般是后台***负责异步消费。一个消息消费者会从中间件拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。
本申请实施例提供的消息发送方法有三个关键角色,生产者平台(Producer)、消费者平台(Consumer)、中间件。生产者负责创建信息,消费者负责对信息进行消费。在传统接口模式中平台A到平台B的传递依靠TCP,在本申请中使用中间件替代TCP,一个Topic相当于一个接口的集合,Topic是消息中间件基本的标配。中间件可以是Kafka等消息中间件利用Kafka的缓存特性将其应用到传统模式的平台间HTTP接口对接模式中。
如图4所示为本申请实施例提供的消息发送方法的模式示意图。由于***A与***B不直接进行对接,而是通过中间件C进行对接,即使中间件C出问题,那也是***A与中间件C之间出问题,并不影响***B,即使***A出问题,那也只是***A自己出问题,***A和***B之间的耦合度很低,可以用于***间的解耦。
并且,Topic是一个消息的集合体,一个Topic可以存数以万计的信息,存取多少数据取决于服务器存储。Topic类似于传统模式中的TCP,不同的是一个TCP携带一条HTTP消息,一万个HTTP就有一万个TCP连接,而本申请实施例中相当于一万个HTTP只需要一个Topic,而一个Topic存储量多少与TCP数量并无直接关系。即我一个接口如果此时被调用一万次,传统模式下需要一万个HTTP连接,而本申请实施例只需要一个TCP连接一个Topic即可,通过不断往Topic中传递消息,进行消息处理。
使用异步消息的方式实现多线程从而对***并发进行销峰。由于中间件的延时消息传递特性,消息并不是即时同步传递,而是***A放消息到中间件C kafka,C kafka再推送消息给***B,在高并发情况下,***B不需要直接面对大量并发,而将压力给到C kafka,而Kafka等消息中间件可以通过集群的部署方式化解压力,保护了***B的稳定性,实现了削峰。
图5所示为传统模式下***A和***B的不同开发语言的接口实现示意图。由于不同语言开发平台之间的底层实现原理不同导致相同的***A (JAVA语言开发)对使用不同开发语言开发的***进行接口对接时,需要逐个进行开发,导致大量重复的工作量。
图6所示为本申请实施例提供的***A和***B的交互模式示意图。通过消息中间件的Topic作为一个中间介质,***A (JAVA语言开发)将功能A的接口数据消息放到Topic中,由各个不同语言平台开发的***去订阅这个Topic,每当中间件接收到消息后,会主动将序列化后的消息(一般为json的String字符串)传递给各个语言开发的平台,对应开发者而言,无需再去开发新的接口,大大节省开发工作量。
图7所示为生产者平台和消费者平台之间的关系示意图。Group-1:消费者平台A和消费者平台B同属于一个消费者群组G1,同一个消费者群组G1中的消费者平台是竞争关系,只有一个消费者平台可以拿到消息,该种模式可以允许集群中每台设备订阅同组内的消费者,可以避免重复消费。
消费者群组G1和消费者群组G2:消费者平台A和消费者平台C属于两个不同消费者群组,异组之间的消费者平台可以同时拿到同一消息,因此,不同的消费者可以存放归属在不同消费者群组中,就可以同时消费,可以达到接口解耦以及跨平台支撑。
消息接收方即是消费者平台,由于中间件可以有不同Topic,每个Topic又包括多个分区,在如何保证消息不重复消费上,可以把消费同一个Topic的消费者平台(各个基于相同语言或者不同语言开发的平台与***)归为不同消费者组,由于中间件中不同消费者群组的消费者可以消费相同Topic同一分区数据,因此在各个消费者平台的代码内需要指定该消费者平台归属哪个消费者群组,消费哪个分区。而生产者也需要再生产消息的时候指定消息的存放Topic与分区,这样可以保证消息消费的唯一性,不重复。
请参见图8,是本申请实施例提供的消息发送装置的结构示意图,如图8所示,该消息发送装置200,应用于中间件,包括:
第一接收模块201,用于接收生产者平台发送的第一消息,所述第一消息携带第一主题标识,所述第一消息是所述生产者平台对获取到的调用请求进行序列化处理得到的,所述调用请求用于调用至少一个消费者平台进行业务处理;
存储模块202,用于将所述第一消息存储在所述第一主题标识对应的第一主题中,所述中间件包括多个主题,每个主题对应不同的主题标识;
第一发送模块203,用于向订阅所述第一主题的消费者平台发送所述第一消息。
本实施例中,中间件可以对生产者平台发送的第一消息进行缓存,缓存的消息数量取决于中间件的存储容量,由于中间件的存储容量可以根据实际需要进行扩充,使得中间件可以缓存的消息数量也可以根据实际需要进行扩充。也就是说,可以通过中间件对生产者平台发送给消费者平台的消息进行缓存,使得生产者平台对消费者平台的调用基于异步方式实现,并且可以提高生产者平台向消费者平台发送消息的并发量,可避免消息发送阻塞,提高平台间的业务调用效率。
在本申请一实施例中,所述装置还包括:
第二发送模块,用于向订阅所述第一主题的消费者平台发送通知消息,所述通知消息用于指示所述第一主题中包括所述第一消息;
第二接收模块,用于接收目标消费者平台发送的用于获取第一消息的消息获取请求,所述目标消费者平台为订阅所述第一主题的消费者平台中的至少一个;
所述第一发送模块,用于响应于所述消息获取请求,向所述目标消费者平台发送所述第一消息。
在本实施例中,中间件可以将第一消息发送给一个或多个消费者平台,使得第一消息在由中间件发送给目标消费者平台时的并发量不受限制,可以提高对目标消费者平台的业务调用效率。
在本申请一实施例中,所述目标消费者平台的数量为多个,所述消息获取请求包括消费者平台所属的群组标识;
所述第一发送模块203,包括:
确定子模块,用于响应于所述消息获取请求,根据所述群组标识,确定多个目标消费者平台所属的消费者群组;
第一发送子模块,用于在所述消费者群组包括第一消费者群组,且所述第一消费者群组包括所述多个目标消费者平台中的至少两个的情况下,向所述第一消费者群组中的一个目标消费者平台发送所述第一消息;
第二发送子模块,用于在所述消费者群组包括第二消费者群组,且所述第二消费者群组包括一个目标消费者平台的情况下,向所述第二消费者群组中的目标消费者平台发送所述第一消息。
本实施例中,将不同的消费者平台归属在不同消费者群组中,这些消费者平台就可以消费同一消息,可以实现消息并发处理。将不同的消费者平台归属在相同消费者群组中,只允许同一消费者群组中的一个消费者平台对同一消息进行消费,避免重复消费。
在本申请一实施例中,所述装置200还包括:
确定模块,用于确定先前未向所述第一消费者群组中的任一消费者平台发送过所述第一消息。
在本实施例中,中间件在向第一消费者群组中的一个目标消费者平台发送第一消息之前,还需要判断先前是否向第一消费者群组中的任一消费者平台发送过第一消息,若否,则向第一消费者群组中的一个目标消费者平台发送第一消息,进一步避免重复消费。
在本申请一实施例中,所述消费者平台的数量为多个,多个所述消费者平台采用至少两种开发语言开发得到。
本实施例中,序列化处理后得到的第一消息可以被各个开发语言开发的消费者平台识别,对于生产者平台来说,在调用多个开发语言开发的消费者平台时,不再需要根据消费者平台的开发语言开发新的接口,大大节省开发工作量。
图9示出了本申请实施例提供的中间件的硬件结构示意图。
中间件可以包括处理器501以及存储有计算机程序指令的存储器502。
具体地,上述处理器501可以包括中央处理器(Central Processing Unit,CPU),或者特定集成电路(Application Specific Integrated Circuit ,ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
存储器502可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器502可包括硬盘驱动器(Hard Disk Drive,HDD)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(Universal Serial Bus,USB)驱动器或者两个或更多个以上这些的组合。在一些实例中,存储器402可以包括可移除或不可移除(或固定)的介质,或者存储器502是非易失性固态存储器。在一些实施例中,存储器502可在电池装置的内部或外部。
在一些实例中,存储器502可以是只读存储器(Read Only Memory,ROM)。在一个实例中,该ROM可以是掩模编程的ROM、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)、电可改写ROM(EAROM)或闪存或者两个或更多个以上这些的组合。
存储器502可以包括只读存储器(ROM),随机存取存储器(RAM),磁盘存储介质设备,光存储介质设备,闪存设备,电气、光学或其他物理/有形的存储器存储设备。因此,通常,存储器包括一个或多个编码有包括计算机可执行指令的软件的有形(非暂态)计算机可读存储介质(例如,存储器设备),并且当该软件被执行(例如,由一个或多个处理器)时,其可操作来执行本申请实施例提供的消息发送方法所描述的操作。
处理器501通过读取并执行存储器502中存储的计算机程序指令,以实现图2所示实施例中的消息发送方法,并达到图2所示实例执行其方法/步骤达到的相应技术效果,为简洁描述在此不再赘述。
另外,本申请实施例可提供一种计算机存储介质来实现。该计算机存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现上述实施例中的任意一种消息发送方法。
需要明确的是,本申请并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本申请的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本申请的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
以上的结构框图中所示的功能块可以实现为硬件、软件、固件或者它们的组合。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本申请的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读介质”可以包括能够存储或传输信息的任何介质。机器可读介质的例子包括电子电路、半导体存储器设备、ROM、闪存、可擦除ROM(EROM)、软盘、CD-ROM、光盘、硬盘、光纤介质、射频(RadioFrequency,RF)链路,等等。代码段可以经由诸如因特网、内联网等的计算机网络被下载。
还需要说明的是,本申请中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或***。但是,本申请不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
上面参考根据本公开的实施例的方法、装置、设备及和计算机程序产品的流程图和/或框图描述了本公开的各方面。应当理解,流程图和/或框图中的每个方框以及流程图和/或框图中各方框的组合可以由计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机、或其它可编程数据处理装置的处理器,以产生一种机器,使得经由计算机或其它可编程数据处理装置的处理器执行的这些指令使能对流程图和/或框图的一个或多个方框中指定的功能/动作的实现。这种处理器可以是但不限于是通用处理器、专用处理器、特殊应用处理器或者现场可编程逻辑电路。还可理解,框图和/或流程图中的每个方框以及框图和/或流程图中的方框的组合,也可以由执行指定的功能或动作的专用硬件来实现,或可由专用硬件和计算机指令的组合来实现。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围,其均应涵盖在本申请的权利要求和说明书的范围当中。尤其是,只要不存在结构冲突,各个实施例中所提到的各项技术特征均可以任意方式组合起来。本申请并不局限于文中公开的特定实施例,而是包括落入权利要求的范围内的所有技术方案。
Claims (9)
1.一种消息发送方法,应用于中间件,其特征在于,包括:
接收生产者平台发送的第一消息,所述第一消息携带第一主题标识,所述第一消息是所述生产者平台对获取到的调用请求进行序列化处理得到的,序列化处理后得到的所述第一消息能够被各个开发语言开发的消费者平台识别,所述调用请求用于调用至少一个消费者平台进行业务处理;
将所述第一消息存储在所述第一主题标识对应的第一主题中,所述中间件包括多个主题,每个主题对应不同的主题标识;
向订阅所述第一主题的消费者平台发送所述第一消息,所述消费者平台的数量为多个,多个所述消费者平台采用至少两种开发语言开发得到,基于相同语言进行开发的消费者平台分在不同的消费者群组,分在不同的消费者群组的消费者平台之间没有竞争关系。
2.根据权利要求1所述的消息发送方法,其特征在于,在所述将所述第一消息存储在所述第一主题标识对应的第一主题中之后,所述向订阅所述第一主题的消费者平台发送所述第一消息之前,所述方法还包括:
向订阅所述第一主题的消费者平台发送通知消息,所述通知消息用于指示所述第一主题中包括所述第一消息;
接收目标消费者平台发送的用于获取第一消息的消息获取请求,所述目标消费者平台为订阅所述第一主题的消费者平台中的至少一个;
所述向订阅所述第一主题的消费者平台发送所述第一消息,包括:
响应于所述消息获取请求,向所述目标消费者平台发送所述第一消息。
3.根据权利要求2所述的消息发送方法,其特征在于,所述目标消费者平台的数量为多个,所述消息获取请求包括消费者平台所属的群组标识;
所述响应于所述消息获取请求,向所述目标消费者平台发送所述第一消息,包括:
响应于所述消息获取请求,根据所述群组标识,确定多个目标消费者平台所属的消费者群组;
在所述消费者群组包括第一消费者群组,且所述第一消费者群组包括所述多个目标消费者平台中的至少两个的情况下,向所述第一消费者群组中的一个目标消费者平台发送所述第一消息;
在所述消费者群组包括第二消费者群组,且所述第二消费者群组包括一个目标消费者平台的情况下,向所述第二消费者群组中的目标消费者平台发送所述第一消息。
4.根据权利要求3所述的消息发送方法,其特征在于,向所述第一消费者群组中的一个目标消费者平台发送所述第一消息之前,所述方法还包括:
确定先前未向所述第一消费者群组中的任一消费者平台发送过所述第一消息。
5.一种消息发送装置,应用于中间件,其特征在于,包括:
第一接收模块,用于接收生产者平台发送的第一消息,所述第一消息携带第一主题标识,所述第一消息是所述生产者平台对获取到的调用请求进行序列化处理得到的,序列化处理后得到的所述第一消息能够被各个开发语言开发的消费者平台识别,所述调用请求用于调用至少一个消费者平台进行业务处理;
存储模块,用于将所述第一消息存储在所述第一主题标识对应的第一主题中,所述中间件包括多个主题,每个主题对应不同的主题标识;
第一发送模块,用于向订阅所述第一主题的消费者平台发送所述第一消息,所述消费者平台的数量为多个,多个所述消费者平台采用至少两种开发语言开发得到,基于相同语言进行开发的消费者平台分在不同的消费者群组,分在不同的消费者群组的消费者平台之间没有竞争关系。
6.根据权利要求5所述的消息发送装置,其特征在于,所述装置还包括:
第二发送模块,用于向订阅所述第一主题的消费者平台发送通知消息,所述通知消息用于指示所述第一主题中包括所述第一消息;
第二接收模块,用于接收目标消费者平台发送的用于获取第一消息的消息获取请求,所述目标消费者平台为订阅所述第一主题的消费者平台中的至少一个;
所述第一发送模块,用于响应于所述消息获取请求,向所述目标消费者平台发送所述第一消息。
7.根据权利要求6所述的消息发送装置,其特征在于,所述目标消费者平台的数量为多个,所述消息获取请求包括消费者平台所属的群组标识;
所述第一发送模块,包括:
确定子模块,用于响应于所述消息获取请求,根据所述群组标识,确定多个目标消费者平台所属的消费者群组;
第一发送子模块,用于在所述消费者群组包括第一消费者群组,且所述第一消费者群组包括所述多个目标消费者平台中的至少两个的情况下,向所述第一消费者群组中的一个目标消费者平台发送所述第一消息;
第二发送子模块,用于在所述消费者群组包括第二消费者群组,且所述第二消费者群组包括一个目标消费者平台的情况下,向所述第二消费者群组中的目标消费者平台发送所述第一消息。
8.一种中间件,其特征在于,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1至4中任一项所述的消息发送方法的步骤。
9.一种可读存储介质,其特征在于,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如权利要求1至4中任一项所述的消息发送方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311694700.0A CN117390337B (zh) | 2023-12-11 | 2023-12-11 | 消息发送方法、装置、中间件及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311694700.0A CN117390337B (zh) | 2023-12-11 | 2023-12-11 | 消息发送方法、装置、中间件及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117390337A CN117390337A (zh) | 2024-01-12 |
CN117390337B true CN117390337B (zh) | 2024-04-26 |
Family
ID=89470598
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311694700.0A Active CN117390337B (zh) | 2023-12-11 | 2023-12-11 | 消息发送方法、装置、中间件及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117390337B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112491998A (zh) * | 2020-11-18 | 2021-03-12 | 平安消费金融有限公司 | 消息推送方法及相关设备 |
CN113259430A (zh) * | 2021-05-11 | 2021-08-13 | 京东数字科技控股股份有限公司 | 一种消息调用方法和装置、电子设备及存储介质 |
CN113329046A (zh) * | 2020-02-28 | 2021-08-31 | 珠海格力电器股份有限公司 | 数据传输方法、***以及存储介质 |
CN113656195A (zh) * | 2021-08-13 | 2021-11-16 | 广州虎牙科技有限公司 | 服务消息通道管理方法、装置和电子设备 |
CN114363407A (zh) * | 2021-12-24 | 2022-04-15 | 上海软素科技有限公司 | 消息服务方法及装置、可读存储介质及电子设备 |
CN115599571A (zh) * | 2022-10-31 | 2023-01-13 | 中国农业银行股份有限公司(Cn) | 一种数据处理方法、装置、电子设备及存储介质 |
CN115695532A (zh) * | 2023-01-04 | 2023-02-03 | 深圳竹云科技股份有限公司 | 利用消息中间件处理消息的方法、装置、计算机设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11765109B2 (en) * | 2020-06-09 | 2023-09-19 | Jpmorgan Chase Bank, N.A. | Method and system for providing resiliency in interaction servicing across data centers |
-
2023
- 2023-12-11 CN CN202311694700.0A patent/CN117390337B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113329046A (zh) * | 2020-02-28 | 2021-08-31 | 珠海格力电器股份有限公司 | 数据传输方法、***以及存储介质 |
CN112491998A (zh) * | 2020-11-18 | 2021-03-12 | 平安消费金融有限公司 | 消息推送方法及相关设备 |
CN113259430A (zh) * | 2021-05-11 | 2021-08-13 | 京东数字科技控股股份有限公司 | 一种消息调用方法和装置、电子设备及存储介质 |
CN113656195A (zh) * | 2021-08-13 | 2021-11-16 | 广州虎牙科技有限公司 | 服务消息通道管理方法、装置和电子设备 |
CN114363407A (zh) * | 2021-12-24 | 2022-04-15 | 上海软素科技有限公司 | 消息服务方法及装置、可读存储介质及电子设备 |
CN115599571A (zh) * | 2022-10-31 | 2023-01-13 | 中国农业银行股份有限公司(Cn) | 一种数据处理方法、装置、电子设备及存储介质 |
CN115695532A (zh) * | 2023-01-04 | 2023-02-03 | 深圳竹云科技股份有限公司 | 利用消息中间件处理消息的方法、装置、计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN117390337A (zh) | 2024-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105677469B (zh) | 定时任务执行方法及装置 | |
CN110018996B (zh) | 一种分布式存储***的快照回滚方法及相关装置 | |
CN111061498B (zh) | 一种配置信息管理*** | |
CN113765714B (zh) | 设备配网方法、装置、存储介质及电子设备 | |
CN111147567A (zh) | 服务调用方法、装置、设备及介质 | |
CN113127564B (zh) | 一种参数同步方法和装置 | |
CN113760468A (zh) | 分布式选举方法、装置、***和介质 | |
CN112630557A (zh) | 设备状态检测方法、装置、设备及介质 | |
CN117390337B (zh) | 消息发送方法、装置、中间件及介质 | |
CN114130035A (zh) | 一种用户匹配方法、装置、设备及存储介质 | |
CN110609967A (zh) | 一种榜单生成方法、装置及存储介质 | |
CN113010330A (zh) | 一种微服务请求重试的方法及终端 | |
CN109308219B (zh) | 任务处理方法、装置及分布式计算机*** | |
CN113409153A (zh) | 业务流程管理***与业务流程处理方法、设备及存储介质 | |
CN114422591B (zh) | 点对点通信方法、数据通信***、计算机设备、存储介质 | |
CN106550021B (zh) | 推送消息的推送方法及装置 | |
CN115082038A (zh) | ***集成方法、装置及电子设备 | |
CN110876852B (zh) | 微服务的网络游戏数据处理方法及*** | |
CN114816866A (zh) | 故障处理方法、装置、电子设备和存储介质 | |
CN110119111B (zh) | 通信方法及装置、存储介质、电子装置 | |
CN112714181A (zh) | 一种数据传输方法及装置 | |
CN110908886A (zh) | 一种数据发送方法、装置、电子设备和存储介质 | |
CN114546979B (zh) | 分布式存储***及其管理方法、装置和设备 | |
CN116414579B (zh) | 基于分布式群组通信实现的多副本间数据一致性的方法 | |
CN117093387B (zh) | 消息处理方法、装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |