CN115118708B - 一种消息中间件的http协议代理方法及装置 - Google Patents
一种消息中间件的http协议代理方法及装置 Download PDFInfo
- Publication number
- CN115118708B CN115118708B CN202211023609.1A CN202211023609A CN115118708B CN 115118708 B CN115118708 B CN 115118708B CN 202211023609 A CN202211023609 A CN 202211023609A CN 115118708 B CN115118708 B CN 115118708B
- Authority
- CN
- China
- Prior art keywords
- message
- client
- queue
- pull
- service module
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
- H04L67/025—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种消息中间件的http协议代理方法及装置,客户端与消息中间件之间建立代理服务模块;代理服务模块获取支持http协议的客户端的生产者名称或消费者名称,生成客户端实例;消息生产时,代理服务模块通过生产者客户端对应的客户端实例向消息中间件发送消息并将消息被接收的结果响应返回客户端;消息消费时,代理服务模块通过消费者客户端对应的客户端实例向消息中间件中拉取消息,并将拉取消息的反馈返回客户端进行拉取消息的消费,本发明的代理服务模块对外采用http协议,对内采用消息中间件协议,进而屏蔽了不同语言与消息中间件交互的难度。
Description
技术领域
本申请涉及消息中间件技术领域,特别是涉及一种消息中间件的http协议代理方法及装置。
背景技术
消息中间件是采用java语言开发的消息队列,它默认提供了java语言的客户端,用于跟消息中间件的组件进行交互。如果非java语言想要生产或消费消息时,需要使用由社区的开发者提供的相应语言的客户端,包括但不限于:c++,go,python等客户端;
由于消息中间件客户端与消息中间件的组件交互采用私有通信协议,并且它承担了很多逻辑,导致非java语言的客户端实现起来很复杂,所以非java客户端往往存在很多bug;另外由于不同语言的客户端由开源社区维护,往往更新不及时,导致很多功能没有实现,也很难兼容各个版本的消息中间件;而当不同语言的客户端出现问题时,需要同时精通此种语言和消息中间件原理的人员,如此高昂的成本,进而导致了业务方很难定位问题所在。
另外,如果业务方使用的语言没有对应的消息中间件客户端时,则无法使用消息中间件服务,比如javascript,c#,php等等。
发明内容
基于上述问题,本申请提供了一种消息中间件的http协议代理方法及装置。
本申请实施例公开了如下技术方案:
一方面,本申请提出一种http协议代理方法,包括:
客户端与消息中间件之间建立代理服务模块,代理服务模块采用web服务实现客户端与消息中间件之间的跨语言消息通讯交互,客户端与代理服务模块之间采用http协议进行通讯;
代理服务模块获取支持http协议的客户端的生产者名称或消费者名称,代理服务模块对应生产者名称或消费者名称初始化创建客户端实例;
消息生产时,代理服务模块根据客户端发送的消息中携带的生产者名称调用对应的客户端实例,通过客户端实例向消息中间件发送消息并将消息被接收的结果响应返回客户端;
消息消费时,代理服务模块根据客户端发送的消息拉取请求中携带的客户端信息调用对应的客户端实例,通过该客户端实例向消息中间件拉取消息,并将拉取消息的反馈返回客户端进行拉取消息的消费。
可选的,进一步包括:代理服务模块对应消息中间件内消费者队列建立反应消费者队列及偏移量的数据库;
消息消费时,代理服务模块从数据库中选择并锁定消费者要消费的拉取队列及该拉取队列的消费进度,客户端实例根据所述拉取队列及该拉取队列的消费进度到消息中间件中拉取消息,并将拉取消息的反馈返回给客户端,拉取消息的反馈包括拉取消息及拉取消息携带的偏移量参数,客户端消费完该批拉取消息后,向代理服务模块发送确认请求,代理服务模块根据确认请求中携带的偏移量参数,更新数据库中的消费进度,并解锁该拉取队列。
可选的,进一步包括:分别与客户端、代理服务模块建立通讯连接的监控运维平台,
所述代理服务模块获取支持http协议的客户端的生产者名称,包括:
客户端向监控运维平台申请获得使用http协议的许可,监控运维平台存储该客户端的生产者名称,代理服务模块定时从监控运维平台中获取支持http协议的生产者名称;
代理服务模块获取支持http协议的客户端的消费者名称,包括:
客户端向监控运维平台申请获得使用http协议的许可,监控运维平台存储该客户端的消费者名称,代理服务模块定时从监控运维平台中获取支持http协议的消费者名称。
可选的,进一步包括:所述数据库内设置用于记录反应消费者队列及偏移量的队列-偏移量数据结构,所述队列-偏移量数据结构对应消息中间件内的队列设置,所述队列-偏移量数据结构包括对应消息中间件内的消息服务实例设置的数据库的消息服务实例,所述数据库的消息服务实例包括数据库队列,数据库的消息服务实例所包含的数据库队列与消息中间件内消息服务实例所包含的队列对应设置,每个数据库队列对应设置有min_offset、mx_offset、commited_offset及lock_timestamp。
所述min_offset表示队列的最小偏移量;
所述mx_offset表示队列的最大偏移量;
所述commited_offset表示队列最近一次确认请求更新的偏移量,所述commited_offset用于确定队列的消费进度;
所述lock_timestamp表示锁定标识及锁定队列的锁定时间戳。
可选的,消费消息时,采用集群消费或广播消费;
集群消费时,所述代理服务模块根据客户端发送的消息拉取请求中携带的客户端信息调用对应的客户端实例,具体包括:
客户端发送的消息拉取请求中携带的客户端信息为消费者名称,代理服务模块根据消费者名称调取对应的客户端实例,每个消费者对应建立一个队列-偏移量数据结构;
广播消费时,所述代理服务模块根据客户端发送的消息拉取请求中携带的客户端信息调用对应的客户端实例,具体包括:
客户端发送的消息拉取请求中携带对应客户端设置的客户端唯一标识,代理服务模块根据客户端唯一标识调取对应的客户端实例,每个客户端唯一标识对应建立一个队列-偏移量数据结构。
可选的,代理服务模块从数据库中选择并锁定消费者要消费的拉取队列及该拉取队列的消费进度,客户端实例根据所述拉取队列及该拉取队列的消费进度到消息中间件中拉取消息,包括:
代理服务模块从数据库中获取所有队列的队列-偏移量数据结构;
循环所有队列,选择并锁定队列中的一个未被锁定且有未被消费消息的队列为拉取队列,根据该拉取队列的commited_offset确定该拉取队列的消费进度;
客户端实例根据该拉取队列及该拉取队列的消费进度到消息中间件中拉取消息。
可选的,所述循环所有队列,选择并锁定队列中的一个未被锁定且有未被消费消息的队列为拉取队列,包括:
循环所有队列的队列-偏移量数据结构,若队列的lock_timestamp未设定锁定标识,且commited_offset指示的消费进度在mx_offset与min_offset之间,则该队列为被消费队列;
在所有所述被消费队列中先以队列中未被消费的消息数量为依据,选出未被消费的消息数量最多的被消费队列,若被选出未被消费的消息数量最多的被消费队列仅一个,则该被消费队列为拉取队列,若被选出未被消费的消息数量最多的被消费队列有多个,则在多个所述被消费队列中选择最近一次被消费的时间点最久远的一个队列为拉取队列;
锁定拉取队列。
可选的,锁定拉取队列,包括:采用分布式全局锁锁定拉取队列。
可选的,包括:所述确认请求中携带的偏移量参数是根据最近一次拉取消息携带的偏移量参数,所述偏移量参数包括消息服务实例名称、队列名称、最近一次拉取消息的初始偏移量、最近一次拉取消息的结束偏移量、从消息中间件中拉取该批拉取消息的启始时刻timestamp;
所述更新数据库中的消费进度,并解锁该拉取队列,包括:
根据消息服务实例名称、队列名称定位到数据库中锁定的拉取队列;
比较数据库中拉取队列的锁定时间戳与偏移量参数中的timestamp是否相同合法,且数据库中拉取队列的commited_offset与偏移量参数中的最近一次拉取消息的初始偏移量是否相同,若两者均相同,则更新数据库中拉取队列的commited_offset为偏移量参数中最近一次拉取消息的结束偏移量,并解锁该拉取队列,反之,本次确认请求失败。
另一方面,本申请还提出一种消息中间件的http协议代理装置,包括:代理服务模块,
所述代理服务模块设置于客户端与消息中间件之间,用于实现跨语言消息通讯交互;
代理服务模块对应支持http协议的生产者名称或消费者名称建立消息中间件的客户端实例;
所述代理服务模块与客户端通过http协议建立通讯连接,用于接收生产消息或接收消息消费的拉取请求;
所述代理服务模块与消息中间件之间采用原生消息中间件协议建立通讯连接,使代理服务模块通过调用客户端实例向消息中间件发送消息或发出拉取消息的请求,消息中间件通过代理服务模块向客户端返回消息被接收的结果或拉取消息的反馈。
可选的,进一步包括:代理服务模块对应消息中间件内消费者队列建立反应消费者拉取队列及偏移量的数据库,
所述代理服务模块与数据库之间为双向通信,使代理服务模块从数据库中获取消费者的拉取队列及该拉取队列的消费进度,也用于客户端消费完拉取消息后,代理服务模块向数据库更新传输该批拉取消息消费完成后对应的最新偏移量。
可选的,还包括:监控运维平台,
所述监控运维平台与客户端建立通讯连接,使客户端获取在代理服务模块中使用http协议的许可,并存储支持http协议的生产者名称及消费者名称;
代理服务模块与监控运维平台建立通讯连接,用于定时从监控运维平台获取生产者名称或消费者名称,并对应创建消息中间件的客户端实例。
可选的,所述代理服务模块包括消息生产接口、消息消费接口,所述消息生产接口与生产消息的客户端建立通信连接;所述消息消费接口与消费消息的客户端建立连接,
消息生产时,消息生产接口用于传输生产者名称及需要传输的消息;
消息消费时,包括集群消费或广播消费,
集群消费时,消息消费接口用于传输消费主题、监控运维平台存储的消费者名称、请求标识码;
广播消费时,消息消费接口用于传输消费主题、监控运维平台存储的消费者的对应名称、请求标识码、客户端唯一标识;
所述请求标识码的设置为该消费者最近一次确认请求的偏移量参数,用于到数据库中确认消费者最近一次消费是否成功。
相较于现有技术,本申请具有以下有益效果:
(1)本申请所述的一种消息中间件的http协议代理方法及装置,设置代理服务模块,代理服务模块对外通过通用的http协议与客户端建立连接,对内采用消息中间件协议跟消息服务实例等进行交互,进而屏蔽了不同语言与消息中间件交互的难度。
(2)本申请所述的一种消息中间件的http协议代理方法及装置,设置基于内存的缓存数据库,数据库对应消息中间件每个消息服务实例中的队列信息及队列的偏移量信息建立队列-偏移量数据结构,在拉取消息时,代理服务模块根据数据库的队列-偏移量数据结构快速选取拉取队列并确定该拉去队列的消费进度,也使代理服务模块不涉及到数据存储,实现代理服务模块的无状态、高可用性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种消息中间件的http协议代理方法示意图;
图2为本申请实施例提供的代理服务模块实现消息生产代理的方法示意图;
图3为本申请实施例提供的代理服务模块实现消息消费代理的方法示意图;
图4为本申请实施例提供的数据库中消费者的队列和偏移量示意图;
图5为本申请实施例提供的消息消费拉取消息示意图;
图6为本申请实施例提供的消息消费拉取消息流程图;
图7为本申请实施例提供的消息消费解锁队列示意图;
图8为本申请实施例提供的消息消费更新数据库消费进度示意图;
图9为本申请实施例提供的一种消息中间件的http协议代理装置与客户端、Rocket MQ集群、监控运维平台以及数据库交互示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
方法实施例
参见图1为一种消息中间件的http协议代理方法示意图。如图1所示,本申请提出一种消息中间件的http协议代理方法,具体方法如下:
客户端与消息中间件之间建立代理服务模块,代理服务模块采用web服务实现客户端与消息中间件之间的跨语言消息通讯交互,代理服务模块对外通过http协议与客户端建立连接,对内采用原生的消息中间件协议跟消息服务实例等进行交互;
代理服务模块定时获取支持http协议的客户端的生产者名称或消费者名称,代理服务模块对应每个生产者名称初始化创建用于向消息中间件发送消息的客户端实例,代理服务模块对应每个消费者名称初始化创建用于向消息中间件拉取消息的客户端实例;
消息生产时,代理服务模块根据客户端发送的消息中携带的生产者名称调用对应的客户端实例,通过客户端实例向消息中间件发送消息并将消息被接收的结果响应返回客户端;
消息消费时,代理服务模块根据客户端发送的消息拉取请求中携带的客户端信息调用对应的客户端实例,通过该客户端实例向消息中间件中拉取消息,并将拉取消息的反馈返回客户端进行拉取消息的消费。
代理服务模块采用web服务,代理服务模块对外通过http协议与客户端建立连接,对内采用原生的消息中间件协议跟消息中间件的消息服务实例等进行交互,代理服务模块获取到客户端的发送消息或消息拉取请求后,代理服务模块通过客户端实例与消息中间件的消息服务实例进行通信,发送消息或拉取消息,并将结果返回给客户端,从而屏蔽了客户端与消息中间件交互的细节,进而屏蔽了不同语言与消息中间件交互的难度。
消息中间件可采用Rocket MQ,
消息服务实例为消息中间件中的Broker,消息中间件中的一个核心组件,主要用于存储消息。
图2为代理服务模块实现消息生产代理的方法示意图。如图2所示,图中虚线框部分是在监控运维平台中实现的,本申请在消息生产时,代理服务模块实现消息生产代理的方法,具体步骤如下:
S11、客户端先在监控运维平台中申请使用http协议发送消息的许可;
S12、监控运维平台会存储支持http协议的生产者名称;
S13、代理服务模块定时从监控运维平台中获取到支持http协议的生产者名称;
S14、代理服务模块对应每个生产者名称(图2中以生产者1、生产者2、生产者3为例)初始化创建用于向消息中间件发送消息的客户端实例;
S15、当客户端发送http消息时,http消息中携带指定的生产者名称,代理服务模块根据生产者名称获取对应的消息中间件客户端实例;
S16、代理服务模块使用客户端实例向消息中间件发送消息,并将消息被接收的结果响应返回给客户端。
所述监控运维平台可采用MQ Cloud。
图3为代理服务模块实现消息消费代理的方法示意图。如图3所示,图中虚线框内是在监控运维平台监控运维平台中实现的,本申请在消费消息时,代理服务模块实现消息消费代理的方法,具体步骤如下:
S211、客户端需要先在监控运维平台中申请使用http协议消费消息的许可;
S212、监控运维平台会存储http协议消费者名称;
S221、代理服务模块定时从监控运维平台中获取到支持http协议的消费者名称;
S222、代理服务模块针对这些消费者名称(图3中以消费者1、消费者2、消费者3为例)初始化创建用于向消息中间件拉取消息的客户端实例;
S231、当客户端发送http消息拉取请求时,该拉取消息携带指定的消费者名称,代理服务模块根据消费者名称调用对应的消息中间件客户端实例;
S232、代理服务模块从数据库中获取到消费者的消费进度;
S233、代理服务模块通过客户端名称对应的客户端实例根据消费进度从消息中间件中拉取消息,并将拉取消息的反馈返回给客户端,拉取消息的反馈包括拉取消息及拉取消息携带的偏移量参数;
S241、客户端消费完此批消息后,向代理服务模块发送确认请求(ACK),以便告知代理服务模块消费成功;
S242、代理服务模块更新数据库中本次拉取队列的消费进度,将数据库中本次拉取队列记录的偏移量更新至本次消费结束时的最新偏移量,以便下次客户端发送消息消费请求时确认消费进度。
所述数据库可采用基于内存的高速缓存数据库Redis。
现有的消息中间件中会设置MQPushConsumer及LitePullConsumer,因为这两种消费实现包含了队列的分配和偏移量管理,本质上是有状态的。而代理服务模块如果依赖它们将无法做到高可用和无状态,因此代理服务模块采用基于内存的缓存数据库做全局存储,并设置了统一的一套队列-偏移量数据结构,参见图4,为数据库中消费者的队列和偏移量示意图,数据库中采用hash结构存储;
所述数据库内设置用于记录反应消费者队列及偏移量的队列-偏移量数据结构,所述队列-偏移量数据结构包括对应消息中间件的消息服务实例设置的数据库消息服务实例(消息中间件中可设置多个消息服务实例,数据库中也对应设置多个消息服务实例,图4中以broker-a、broker-b为例表示对应的消息服务实例名称),所述数据库消息服务实例包括数据库队列,数据库内消息服务实例所包含的队列与消息中间件内消息服务实例所包含的队列对应设置,每个数据库队列对应设置有min_offset、mx_offset、commited_offset及lock_timestamp;min_offset、mx_offset、commited_offset及lock_timestamp用于反映对应队列的偏移量信息。
队列名称表示为qn,其中,n表示队列编号,n取值为自然数,在图4中以q0、q1为例表示;数据库内队列名称与消息中间件内的队列名称对应设置;
min_offset表示队列的最小偏移量,
mx_offset表示队列的最大偏移量,
commited_offset表示确认消费的偏移量,
lock_timestamp表示锁定标识及锁定时间戳。
消息消费包括集群消费和广播消费,集群消费为所有的消费实例均分消息进行消费,广播消费要保障每个消费实例消费所有消息。
图5为消息消费拉取消息示意图,图6为消息消费拉取消息流程图。如图5、图6所示,代理服务模块实现集群消费的方法,具体如下:
S301、客户端发送拉取消息的请求;
S302、代理服务模块从数据库中获取所有队列(在图5中以队列q0、q1、q2为例)的队列-偏移量数据结构;
S303、循环所有队列,选择队列中的一个未被锁定且有未被消费的新消息的队列为拉取队列;
S304、锁定该拉取队列(图5中以锁定拉取队列q1为例);
S305、根据该拉取队列的commited_offset确定该拉取队列的消费进度,客户端实例根据该拉取队列信息及该拉取队列的消费进度到消息中间件中拉取消息(例如,图5向消息中间件中对应的消息服务实例broker-a中的队列q1拉取消息);
采用统一的队列-偏移量数据结构后,代理服务模块仅使用消息中间件原生的DefaultMQPullConsumer,并根据数据库获取消费者要拉取队列所属的消息服务实例名称、拉取队列名称,以及该拉取队列的偏移量commited_offset,直接向消息中间件中找到对应的费服务实例名称及拉取队列名称,并根据拉取队列的偏移量向消息中间件拉取消息。
S306、拉取消息返回给客户端,拉取消息中携带本次拉取消息及偏移量参数,所述偏移量参数用于后续消息消费完成后返回确认请求时使用。
偏移量参数定义可为:
BrokerID:queueID:offset:next_offset:timestamp,
所述偏移量参数中,BrokerID为消息服务实例名称,用于指示本次拉取消息所在的消息服务实例(broker-a),queueID为队列名称,用于指示本次拉取消息所在的队列(q1),offset为最近一次拉取消息的初始偏移量,next_offset为最近一次拉取消息的结束偏移量,timestamp为从消息中间件中拉取该批拉取消息的时刻;
图7为消息消费解锁队列示意图,图8为消息消费更新数据库消费进度示意图。如图7、图8所示,代理服务模块收到客户端发送的确认请求后,更新数据库中的消费进度,并解锁该拉取队列,具体方法如下:
获取本次拉取消息反馈中的偏移量参数,
根据消息服务实例名称、队列名称定位到数据库中锁定的拉取队列(在图7中以消息服务实例名称broker-a,队列q0、q1、q2为例,定位到broker-a的q1,并解锁拉取队列q1);
比较数据库中拉取队列的锁定时间戳与偏移量参数中的timestamp是否相同合法,且数据库中拉取队列的commited_offset与偏移量参数中的最近一次拉取消息的初始偏移量是否相同,若两者均相同,确认偏移量参数,更新数据库中拉取队列的commited_offset为偏移量参数中最近一次拉取消息的结束偏移量,并解锁该拉取队列,反之,本次确认请求失败,报错。
此外,代理服务模块通过修改数据库中队列偏移量的已消费偏移量的值实现消息的重新消费,代理服务模块通过监控数据库中已消费偏移量的值,可以实现堆积监控。
监控运维平台通过调用代理服务模块的通讯接口实现了web展示,监控消息堆积情况。
广播消费中,要保障每个消费者实例消费所有消息,因此,对应每个队列,所有消费者实例均需对该队列的所有消息进行消费,由于代理服务模块是web服务,无法区分请求来自于一个客户端还是多个客户端,因此,为了实现广播消费,需要客户端发送请求时加上一个唯一标识,即客户端唯一标识Client ID,不同的客户端使用不同的客户端唯一标识,比如可以使用ip+进程id作为客户端唯一标识。每个客户端唯一标识拥有自己的队列和偏移量,从而可以实现每个客户端唯一标识的客户端实现消费进度的隔离,使得不同客户端唯一标识的客户端可以消费所有的消息。
代理服务模块收到消费请求后,通过客户端唯一标识即可区分不同的客户端。
广播消费与集群消费实现总体类似,唯一的区别就是每个客户端唯一标识都单独对应一个队列-偏移量数据结构。
装置实施例
本申请还提出一种消息中间件的http协议代理装置,包括:代理服务模块,
所述代理服务模块设置于客户端与消息中间件之间,用于实现跨语言消息通讯交互;
代理服务模块对应支持http协议的生产者名称或消费者名称建立消息中间件的客户端实例;
所述代理服务模块与客户端通过http协议建立通讯连接,用于接收生产消息或接收消息消费的拉取请求;
所述代理服务模块与消息中间件之间采用原生消息中间件协议建立通讯连接,使代理服务模块通过调用客户端实例向消息中间件发送消息或发出拉取消息的请求,消息中间件通过代理服务模块向客户端返回消息被接收的结果或拉取消息的反馈。
客户端与消息中间件之间设置代理服务模块,代理服务模块对外通过http协议与客户端建立连接,对内采用消息中间件协议跟消息服务实例等进行交互,屏蔽了不同语言与消息中间件交互的难度。
图9为一种消息中间件的http协议代理装置与客户端、Rocket MQ集群、监控运维平台以及数据库交互示意图。如图9所示,一种消息中间件的http协议代理装置,还包括:监控运维平台 、数据库,
所述监控运维平台与客户端建立通讯连接,使客户端获得在代理服务模块中使用http协议的许可,并存储支持http协议的客户端名称,所述客户端名称为生产者名称或消费者名称;代理服务模块与监控运维平台建立通讯连接,用于定时从监控运维平台获取客户端名称,并对应创建消息中间件的客户端实例;
数据库存储内容为消息中间件内消费者队列信息及所述消费者队列的消费进度信息,
所述代理服务模块与数据库之间为双向通信,使代理服务模块从数据库中获取消费者的拉取队列及该拉取队列的消费进度,也用于客户端消费完拉取消息后,代理服务模块向数据库更新传输该批拉取消息消费完成后对应的最新偏移量。
所述代理服务模块还包括消息生产接口、消息消费接口,所述消息生产接口与生产消息的客户端建立通信连接;所述消息消费接口与消费消息的客户端建立连接,
消息生产时,消息生产接口用于传输生产者名称及需要传输的消息;
消息生产接口发送信息如下:
请求行:POST /mq/produce HTTP/1.1
请求参数:
producer:在监控运维平台申请的生产者名称;
message:消息内容。
消息被接收的结果响应内容如表1:
表1
消息消费时,包括集群消费或广播消费
消息消费接口发送消息如下:
请求行:GET /mq/message HTTP/1.1
请求参数:
topic:消费的主题;
consumer:在监控运维平台申请的消费者名称;
requestId:请求标识码,设置为该消费者最近一次确认请求的偏移量参数,用于确认最近一次次消费完成;
clientId:客户端唯一标识,广播模式消费时设置,用于区分不用的实例。
拉取消息的反馈响应内容如表2:
表2
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法及装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法及装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元提示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本申请的一种具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
Claims (11)
1.一种消息中间件的http协议代理方法,其特征在于,包括:
客户端与消息中间件之间建立代理服务模块,代理服务模块采用web服务实现客户端与消息中间件之间的跨语言消息通讯交互,客户端与代理服务模块之间采用http协议进行通讯;
代理服务模块获取支持http协议的客户端的生产者名称或消费者名称,代理服务模块对应生产者名称或消费者名称初始化创建客户端实例;
消息生产时,代理服务模块根据客户端发送的消息中携带的生产者名称调用对应的客户端实例,通过客户端实例向消息中间件发送消息并将消息被接收的结果响应返回客户端;
消息消费时,代理服务模块根据客户端发送的消息拉取请求中携带的客户端信息调用对应的客户端实例,通过该客户端实例向消息中间件拉取消息,并将拉取消息的反馈返回客户端进行拉取消息的消费;
代理服务模块对应消息中间件内消费者队列建立反应消费者队列及偏移量的数据库;
消息消费时,代理服务模块从数据库中选择并锁定消费者要消费的拉取队列及该拉取队列的消费进度,客户端实例根据所述拉取队列及该拉取队列的消费进度到消息中间件中拉取消息,并将拉取消息的反馈返回给客户端,拉取消息的反馈包括拉取消息及拉取消息携带的偏移量参数,客户端消费完该批拉取消息后,向代理服务模块发送确认请求,代理服务模块根据确认请求中携带的偏移量参数,更新数据库中的消费进度,并解锁该拉取队列。
2.根据权利要求1所述的一种消息中间件的http协议代理方法,其特征在于,进一步包括:分别与客户端、代理服务模块建立通讯连接的监控运维平台,
所述代理服务模块获取支持http协议的客户端的生产者名称,包括:
客户端向监控运维平台申请获得使用http协议的许可,监控运维平台存储该客户端的生产者名称,代理服务模块定时从监控运维平台中获取支持http协议的生产者名称;
代理服务模块获取支持http协议的客户端的消费者名称,包括:
客户端向监控运维平台申请获得使用http协议的许可,监控运维平台存储该客户端的消费者名称,代理服务模块定时从监控运维平台中获取支持http协议的消费者名称。
3.根据权利要求1所述的一种消息中间件的http协议代理方法,其特征在于,进一步包括:所述数据库内设置用于记录反应消费者队列及偏移量的队列-偏移量数据结构,所述队列-偏移量数据结构对应消息中间件内的队列设置,所述队列-偏移量数据结构包括对应消息中间件内的消息服务实例设置的数据库的消息服务实例,所述数据库的消息服务实例包括数据库队列,数据库的消息服务实例所包含的数据库队列与消息中间件内消息服务实例所包含的队列对应设置,每个数据库队列对应设置有min_offset、mx_offset、commited_offset及lock_timestamp;
所述min_offset表示队列的最小偏移量;
所述mx_offset表示队列的最大偏移量;
所述commited_offset表示队列最近一次确认请求更新的偏移量,所述commited_offset用于确定队列的消费进度;
所述lock_timestamp表示锁定标识及锁定队列的锁定时间戳。
4.根据权利要求3所述的一种消息中间件的http协议代理方法,其特征在于:消费消息时,采用集群消费或广播消费;
集群消费时,所述代理服务模块根据客户端发送的消息拉取请求中携带的客户端信息调用对应的客户端实例,具体包括:
客户端发送的消息拉取请求中携带的客户端信息为消费者名称,代理服务模块根据消费者名称调取对应的客户端实例,每个消费者对应建立一个队列-偏移量数据结构;
广播消费时,所述代理服务模块根据客户端发送的消息拉取请求中携带的客户端信息调用对应的客户端实例,具体包括:
客户端发送的消息拉取请求中携带对应客户端设置的客户端唯一标识,代理服务模块根据客户端唯一标识调取对应的客户端实例,每个客户端唯一标识对应建立一个队列-偏移量数据结构。
5.根据权利要求3所述的一种消息中间件的http协议代理方法,其特征在于,代理服务模块从数据库中选择并锁定消费者要消费的拉取队列及该拉取队列的消费进度,客户端实例根据所述拉取队列及该拉取队列的消费进度到消息中间件中拉取消息,包括:
代理服务模块从数据库中获取所有队列的队列-偏移量数据结构;
循环所有队列,选择并锁定队列中的一个未被锁定且有未被消费消息的队列为拉取队列,根据该拉取队列的commited_offset确定该拉取队列的消费进度;
客户端实例根据该拉取队列及该拉取队列的消费进度到消息中间件中拉取消息。
6.根据权利要求5所述的一种消息中间件的http协议代理方法,其特征在于,所述循环所有队列,选择并锁定队列中的一个未被锁定且有未被消费消息的队列为拉取队列,包括:
循环所有队列的队列-偏移量数据结构,若队列的lock_timestamp未设定锁定标识,且commited_offset指示的消费进度在mx_offset与min_offset之间,则该队列为被消费队列;
在所有所述被消费队列中先以队列中未被消费的消息数量为依据,选出未被消费的消息数量最多的被消费队列,若被选出未被消费的消息数量最多的被消费队列仅一个,则该被消费队列为拉取队列,若被选出未被消费的消息数量最多的被消费队列有多个,则在多个所述被消费队列中选择最近一次被消费的时间点最久远的一个队列为拉取队列;
锁定拉取队列。
7.根据权利要求6所述的一种消息中间件的http协议代理方法,其特征在于,锁定拉取队列,包括:采用分布式全局锁锁定拉取队列。
8.根据权利要求3所述的一种消息中间件的http协议代理方法,其特征在于,包括:所述确认请求中携带的偏移量参数是根据最近一次拉取消息携带的偏移量参数,所述偏移量参数包括消息服务实例名称、队列名称、最近一次拉取消息的初始偏移量、最近一次拉取消息的结束偏移量、从消息中间件中拉取该批拉取消息的启始时刻timestamp;
所述更新数据库中的消费进度,并解锁该拉取队列,包括:
根据消息服务实例名称、队列名称定位到数据库中锁定的拉取队列;
比较数据库中拉取队列的锁定时间戳与偏移量参数中的timestamp是否相同合法,且数据库中拉取队列的commited_offset与偏移量参数中的最近一次拉取消息的初始偏移量是否相同,若两者均相同,则更新数据库中拉取队列的commited_offset为偏移量参数中最近一次拉取消息的结束偏移量,并解锁该拉取队列,反之,本次确认请求失败。
9.一种消息中间件的http协议代理装置,其特征在于,包括:客户端与消息中间件之间建立的代理服务模块,代理服务模块采用web服务实现客户端与消息中间件之间的跨语言消息通讯交互,客户端与代理服务模块之间采用http协议进行通讯;
所述代理服务模块用于获取支持http协议的客户端的生产者名称或消费者名称,代理服务模块对应生产者名称或消费者名称初始化创建客户端实例;
消息生产时,所述代理服务模块用于根据客户端发送的消息中携带的生产者名称调用对应的客户端实例,通过客户端实例向消息中间件发送消息并将消息被接收的结果响应返回客户端;
消息消费时,所述代理服务模块用于根据客户端发送的消息拉取请求中携带的客户端信息调用对应的客户端实例,通过该客户端实例向消息中间件拉取消息,并将拉取消息的反馈返回客户端进行拉取消息的消费;
代理服务模块对应消息中间件内消费者队列建立反应消费者拉取队列及偏移量的数据库;
消息消费时,代理服务模块从数据库中选择并锁定消费者要消费的拉取队列及该拉取队列的消费进度,客户端实例根据所述拉取队列及该拉取队列的消费进度到消息中间件中拉取消息,并将拉取消息的反馈返回给客户端,拉取消息的反馈包括拉取消息及拉取消息携带的偏移量参数,客户端消费完该批拉取消息后,向代理服务模块发送确认请求,代理服务模块根据确认请求中携带的偏移量参数,更新数据库中的消费进度,并解锁该拉取队列。
10.根据权利要求9所述的一种消息中间件的http协议代理装置,其特征在于,还包括:分别与客户端、代理服务模块建立通讯连接的监控运维平台,
代理服务模块用于获取支持http协议的客户端的生产者名称,包括:
客户端向监控运维平台申请获得使用http协议的许可,监控运维平台用于存储该客户端的生产者名称,代理服务模块定时从监控运维平台中获取支持http协议的生产者名称;
代理服务模块用于获取支持http协议的客户端的消费者名称,包括:
客户端向监控运维平台申请获得使用http协议的许可,监控运维平台用于存储该客户端的消费者名称,代理服务模块定时从监控运维平台中获取支持http协议的消费者名称。
11.根据权利要求9所述的一种消息中间件的http协议代理装置,其特征在于:所述代理服务模块包括消息生产接口、消息消费接口,所述消息生产接口与生产消息的客户端建立通信连接;所述消息消费接口与消费消息的客户端建立连接,
消息生产时,消息生产接口用于传输生产者名称及需要传输的消息;
消息消费时,包括集群消费或广播消费,
集群消费时,消息消费接口用于传输消费主题、监控运维平台存储的消费者名称、请求标识码;
广播消费时,消息消费接口用于传输消费主题、监控运维平台存储的消费者的对应名称、请求标识码、客户端唯一标识;
所述请求标识码的设置为该消费者最近一次确认请求的偏移量参数,用于到数据库中确认消费者最近一次消费是否成功。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211023609.1A CN115118708B (zh) | 2022-08-25 | 2022-08-25 | 一种消息中间件的http协议代理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211023609.1A CN115118708B (zh) | 2022-08-25 | 2022-08-25 | 一种消息中间件的http协议代理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115118708A CN115118708A (zh) | 2022-09-27 |
CN115118708B true CN115118708B (zh) | 2023-01-03 |
Family
ID=83336002
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211023609.1A Active CN115118708B (zh) | 2022-08-25 | 2022-08-25 | 一种消息中间件的http协议代理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115118708B (zh) |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7698429B1 (en) * | 2004-04-22 | 2010-04-13 | Perot Systems Corporation | System and method for customizing a core product |
KR100671506B1 (ko) * | 2005-09-13 | 2007-01-19 | 한미아이티 주식회사 | 모바일 미들웨어 및 이를 이용한 비즈니스 로직 처리 방법 |
CN109756508B (zh) * | 2019-01-22 | 2022-11-08 | 深圳壹账通智能科技有限公司 | 基于多协议接入区块链网络的消息代理方法及相关设备 |
CN113204436A (zh) * | 2020-02-03 | 2021-08-03 | 马上消费金融股份有限公司 | 一种消息处理方法、装置、设备及计算机可读存储介质 |
CN111740872A (zh) * | 2020-05-06 | 2020-10-02 | 北京百度网讯科技有限公司 | 消息传递测试方法、装置、电子设备和存储介质 |
CN111756844A (zh) * | 2020-06-24 | 2020-10-09 | 深圳前海微众银行股份有限公司 | 一种多语言消息代理方法及装置 |
CN112217886B (zh) * | 2020-09-27 | 2023-04-28 | 建信金融科技有限责任公司 | 分布式系统的测试方法及系统、消息生产及消费模块 |
CN114338063B (zh) * | 2020-09-29 | 2023-11-10 | 中移物联网有限公司 | 消息队列系统、业务处理方法及计算机可读存储介质 |
CN112559208A (zh) * | 2020-12-15 | 2021-03-26 | 浪潮云信息技术股份公司 | 一种应用于政务云平台构建微服务mq的方法 |
CN113342503B (zh) * | 2021-06-30 | 2024-02-13 | 招商局金融科技有限公司 | 实时进度反馈方法、装置、设备及存储介质 |
CN114827156B (zh) * | 2022-03-28 | 2023-12-01 | 阿里巴巴(中国)有限公司 | 消息调度的方法、装置、设备及存储介质 |
-
2022
- 2022-08-25 CN CN202211023609.1A patent/CN115118708B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN115118708A (zh) | 2022-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9648101B2 (en) | Synchronization of web service endpoints in a multi-master synchronization environment | |
CN107465767B (zh) | 一种数据同步的方法和系统 | |
US8719780B2 (en) | Application server with a protocol-neutral programming model for developing telecommunications-based applications | |
US7739391B2 (en) | Gateway for wireless mobile clients | |
CN102148817B (zh) | 配置网络设备的方法、客户端、服务器端及网络系统 | |
CN110557357B (zh) | 一种远程过程调用协议自适应方法、相关装置及服务器 | |
US20050091362A1 (en) | System for providing information between different protocol environments cooperative with each other and a method therefor | |
US7814051B2 (en) | Managing watcher information in a distributed server environment | |
CN109783151B (zh) | 规则变更的方法和装置 | |
US7373424B2 (en) | Exactly once protocol for message-based collaboration | |
CN105787707A (zh) | 替换邮箱的自动发现 | |
US8326913B2 (en) | Method and system for service contract discovery | |
US20050078705A1 (en) | Service providing system cooperative with SIP and web systems and a method therefor | |
US20210218622A1 (en) | Dynamic service creation for microservice-based integration service | |
CN114900449B (zh) | 一种资源信息管理方法、系统及装置 | |
WO2013097363A1 (zh) | 一种调度数据共享装置的方法及系统 | |
CN115118708B (zh) | 一种消息中间件的http协议代理方法及装置 | |
CN114116791A (zh) | 一种基于mqtt协议消息的数据同步方法及系统 | |
CN114979144B (zh) | 云边通信方法、装置及电子设备 | |
CN114025005B (zh) | 一种数据通讯方法、系统、电子设备及存储介质 | |
US8190780B2 (en) | Cluster architecture having a star topology with centralized services | |
CN115102854B (zh) | 微服务的远程过程调用路由管理控制方法、系统及设备 | |
CN110991676B (zh) | 一种基于模块化设计的运维管理平台 | |
CN102594614A (zh) | 消息中间件的软件版本监视方法和数据交换设备 | |
JP4843301B2 (ja) | 機器情報配信システム |
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 |