CN114338063B - 消息队列系统、业务处理方法及计算机可读存储介质 - Google Patents
消息队列系统、业务处理方法及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114338063B CN114338063B CN202011050143.5A CN202011050143A CN114338063B CN 114338063 B CN114338063 B CN 114338063B CN 202011050143 A CN202011050143 A CN 202011050143A CN 114338063 B CN114338063 B CN 114338063B
- Authority
- CN
- China
- Prior art keywords
- message
- module
- user
- service
- authentication
- 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
- 238000003860 storage Methods 0.000 title claims abstract description 36
- 238000003672 processing method Methods 0.000 title claims abstract description 25
- 238000012545 processing Methods 0.000 claims abstract description 25
- 238000009826 distribution Methods 0.000 claims abstract description 11
- 238000013507 mapping Methods 0.000 claims description 19
- 238000000034 method Methods 0.000 claims description 15
- 238000012790 confirmation Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 4
- 230000006870 function Effects 0.000 abstract description 4
- 238000004891 communication Methods 0.000 description 27
- 230000003993 interaction Effects 0.000 description 14
- 238000004519 manufacturing process Methods 0.000 description 14
- 238000012546 transfer Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 238000005315 distribution function Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种消息队列系统、业务处理方法及计算机可读存储介质,该消息队列系统包括:协议网关模块、鉴权模块、代理模块和调度模块,其中,协议网关模块、鉴权模块、代理模块和调度模块分别部署在各自对应的集群中;鉴权模块,用于对第一用户进行鉴权;协议网关模块,用于在第一用户鉴权通过的情况下,接收第一用户发送的业务报文;调度模块,用于从代理模块所属的集群中确定对业务报文中的消息进行存储和/或分发的目标节点;代理模块,用于在目标节点中对消息进行存储和/或分发,并在消息存储和/或分发完成的情况下,将处理结果返回给第一用户。这样可以通过各个模块所属的集群来独立完成各自对应的功能,从而提高了消息队列的稳定性。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种消息队列系统、业务处理方法及计算机可读存储介质。
背景技术
由于消息队列具有异步、解耦和削峰等优势,在许多业务场景中被广泛使用。目前,现有的消息队列采用单体式开发,即消息队列的所有服务都在一个程序包里实现,因此,消息队列中的各功能模块之间的耦合度较高,当其中一个功能模块出问题时,会导致整个消息队列不可用,从而导致消息队列的稳定性较低。
发明内容
本发明实施例提供一种消息队列系统、业务处理方法及计算机可读存储介质,以解决现有的消息队列采用单体式开发,导致消息队列的稳定性较低的问题。
为解决上述技术问题,本发明是这样实现的:
第一方面,本发明实施例提供了一种消息队列系统,所述消息队列系统包括:协议网关模块、鉴权模块、代理模块和调度模块;其中,所述协议网关模块、所述鉴权模块、所述代理模块和所述调度模块分别部署在各自对应的集群中;
所述鉴权模块,用于对第一用户进行鉴权;
所述协议网关模块,用于在所述第一用户鉴权通过的情况下,接收所述第一用户发送的业务报文;
所述调度模块,用于从所述代理模块所属的集群中确定对所述业务报文中的消息进行存储和/或分发的目标节点;
所述代理模块,用于在所述目标节点中对所述消息进行存储和/或分发,并在所述消息存储和/或分发完成的情况下,将处理结果返回给所述第一用户。
第二方面,本发明实施例还提供了一种业务处理方法,所述业务处理方法应用于第一方面所述的消息队列系统,所述业务处理方法包括:
所述鉴权模块对第一用户进行鉴权;
所述协议网关模块在所述第一用户鉴权通过的情况下,接收所述第一用户发送的业务报文;
所述调度模块从所述代理模块所属的集群中确定对所述业务报文中的消息进行存储和/或分发的目标节点;
所述代理模块在所述目标节点中对所述消息进行存储和/或分发,并在所述消息存储和/或分发完成的情况下,将处理结果返回给所述第一用户。
第三方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面的业务处理方法的步骤。
在本发明实施例中,该消息队列系统包括:协议网关模块、鉴权模块、代理模块和调度模块,其中,所述协议网关模块、所述鉴权模块、所述代理模块和所述调度模块分别部署在各自对应的集群中;所述鉴权模块,用于对第一用户进行鉴权;所述协议网关模块,用于在所述第一用户鉴权通过的情况下,接收所述第一用户发送的业务报文;所述调度模块,用于从所述代理模块所属的集群中确定对所述业务报文中的消息进行存储和/或分发的目标节点;所述代理模块,用于在所述目标节点中对所述消息进行存储和/或分发,并在所述消息存储和/或分发完成的情况下,将处理结果返回给所述第一用户。这样可以通过各个模块所属的集群来独立完成各自对应的功能,当模块所属的集群中的某一节点出现故障时,不会导致消息队列整体不可用,从而提高了消息队列的稳定性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的消息队列系统的结构示意图;
图2是本申请实施例提供的业务处理方法的流程图之一;
图3是本申请实施例提供的业务处理方法的流程图之二;
图4是本申请实施例提供的第一用户与消息队列系统的交互流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,图1是本发明实施例提供的消息队列系统的结构示意图,如图1所示,该消息队列系统1000包括:协议网关模块110、鉴权模块120、代理模块130和调度模块140,其中,协议网关模块110、鉴权模块120、代理模块130和调度模块140分别部署在各自对应的集群中;
鉴权模块120,用于对第一用户2000进行鉴权;
协议网关模块110,用于在第一用户2000鉴权通过的情况下,接收第一用户2000发送的业务报文;
调度模块140,用于从代理模块130所属的集群中确定对业务报文中的消息进行存储和/或分发的目标节点;
代理模块130,用于在目标节点中对消息进行存储和/或分发,并在消息存储和/或分发完成的情况下,将处理结果返回给第一用户2000。
具体地,该消息队列系统1000是基于微服务架构来进行部署的,此处的微服务架构是指将一个大型的单个应用程序或服务拆分为数个甚至数十个微服务,每个微服务可以被独立部署,每个微服务之间是松耦合的,每个微服务只需要关注一件任务并很好的完成该任务。因此,该消息队列系统1000中的协议网关模块110、鉴权模块120、代理模块130和调度模块140分别为一个微服务,各自部署在对应的集群中。
鉴权模块120,用于对第一用户2000进行鉴权。上述第一用户2000可以是消息生产者,也可以是消息消费者,可以为一个,也可以为多个,本实施例不做具体限定。在对第一用户2000进行鉴权前需要获取第一用户2000的鉴权信息,该鉴权信息包括但不限于消息队列名称MqName、认证令牌AuthToken、消息主题Topic、许可PerMission等。该鉴权模块120获取到第一用户2000的鉴权信息后,将第一用户2000的鉴权信息与预设的鉴权数据库中的鉴权信息匹配,若第一用户2000的鉴权信息与预设的鉴权数据库中的鉴权信息匹配一致,则表示该第一用户2000的身份合法,可以继续进行业务交互;否则,则表示该第一用户2000的身份不合法,停止该第一用户2000的业务交互行为。
协议网关模块110,用于在第一用户2000鉴权通过的情况下,接收第一用户2000发送的业务报文。上述第一用户2000可以使用该协议网关模块110所支持的多种通信协议中的任意一种通信协议来接入至协议网关模块110,通过该通信协议来传输第一用户2000和协议网关模块110之间的业务报文。此处的业务报文包括生产报文、订阅报文和取消订阅报文,其中,生产报文用于第一用户2000将消息存储至消息队列,订阅报文用于从消息队列中订阅消息给第一用户2000,取消订阅报文用于停止推送消息队列中的订阅消息给第一用户2000。该协议网关模块110可以支持多种通信协议接入,如消息队列遥测通信协议(MessageQueuing Telemetry Transport,简称MQTT)、增强设备协议(Enhanced Device Protocol,简称EDP)、WebSocket协议等长连接协议,也可以是超文本传输协议(Hyper Text TransferProtocol,简称HTTP)等短连接协议。第一用户2000可以根据自身实际情况选择某一种通信协议接入至协议网关模块110,由协议网关模块110接收第一用户2000发送的业务报文。需要说明的是,第一用户2000与协议网关模块110之间传输的数据是按照第一用户2000自身使用的通信协议组装的报文,在协议网关模块110中可以再按照对应的通信协议对报文数据进行解析,由此得到业务相关信息,如消息队列名称MqName、认证令牌AuthToken、消息主题Topic、消息Msg、许可PerMission等信息。
调度模块140,用于从代理模块130所属的集群中确定对业务报文中的消息进行存储和/或分发的目标节点。在代理模块130对业务报文中的消息进行存储前,调度模块140可以获取代理模块130所属的集群中各节点的负载情况,并根据各节点的负载情况,将各节点中负载最小的节点作为目标节点。在代理模块130对业务报文中的消息进行分发前,调度模块140可以获取订阅报文中的消息主题,根据消息主题在代理模块130所属的集群中的各节点查找待订阅的消息的存储地址,并待订阅消息的存储地址所在的节点作为目标节点。除此之外,该调度模块140还可以用于对代理模块130所属的集群中的各节点的本地数据库RoscksDB中的、消息主题Topic和本地数据库之间的映射关系进行管理维护。并且,该调度模块140还用于代理模块130所属的集群中各节点的数据一致性进行管理,举例来说,可以选择Raft算法来保证代理模块130所属的集群中各节点数据的一致性,保证即使在部分节点故障、网络延迟、网络分割的情况下,也能提供稳定的服务,以保证代理模块130所属的集群中各节点的数据的一致性。
代理模块130,用于在目标节点中对消息进行存储和/或分发,并在消息存储和/或分发完成的情况下,将处理结果返回给第一用户2000。代理模块130根据预设的消息队列配置数据对业务报文中的消息进行存储和/或分发。上述预设的消息队列配置数据包括但不限于配置消费模式、存储空间大小、消息过期时间等信息,其中,配置消费模式可以是最多一次的消费模式,也可以是至少一次的消费模式。最多一次的消费模式是指在同一个订阅下,消息只会推送一次,不需要消费侧响应确认消息。至少一次的消费模式是指在同一个订阅下,在设置了消息锁定时间后,在该锁定时间内,若无应答确认,则认为消费失败,锁定时间段之后,第一用户2000可以再次消费到该未被确认的消息。代理模块130可以根据预设的消息队列配置数据对业务报文中的消息进行存储,以实现第一用户2000对消息的生产,和/或,对业务报文中的消息进行分发,以实现第一用户2000对消息的消费。并在业务处理完后,将处理结果返回至协议网关模块110,再由协议网关模块110返回给第一用户2000。
需要说明的是,上述各模块分别部署在各自对应的集群中,都支持水平扩展,且各模块之间可以通过Google远程过程调用(Google Remote Procedure Call,简称gRPC)进行通信,实现每个模块之间的解耦。其中,协议网关模块110和鉴权模块120均是无状态设计,便于横向扩展,能够较好的实现物联网广连接的特性。
进一步地,协议网关模块110,还用于接收第一用户2000发送的连接报文,并解析出连接报文中的鉴权信息;鉴权模块120,具体用于根据鉴权信息,对第一用户2000进行鉴权。
上述连接报文是第一用户2000向协议网关模块110请求接入时发送的报文,可以用于协议网关模块110对第一用户2000进行鉴权。协议网关模块110在接收到连接报文后,采用连接报文对应的通信协议对其进行解析,得到鉴权信息。其中,鉴权信息包括但不限于消息队列名称MqName、认证令牌AuthToken、消息主题Topic、许可PerMission等。鉴权模块120获取到第一用户2000的鉴权信息后,将第一用户2000的鉴权信息与预设的鉴权数据库中的鉴权信息匹配,若第一用户2000的鉴权信息与预设的鉴权数据库中的鉴权信息匹配一致,则表示该第一用户2000的身份合法,可以继续进行业务交互;否则,则表示该第一用户2000的身份不合法,停止该第一用户2000的业务交互行为。
进一步地,协议网关模块110,还用于:确定业务报文对应的协议类型;在协议类型为长连接的情况下,创建业务报文对应的会话。
由于协议网关模块110可以支持消息队列遥测通信协议(Message QueuingTelemetry Transport,简称MQTT)、增强设备协议(Enhanced Device Protocol,简称EDP)、WebSocket协议等长连接协议,也可以是超文本传输协议(Hyper Text TransferProtocol,简称HTTP)等短连接协议。因此,协议网关模块110可以根据不同的连接方式与第一用户2000建立连接,因而在建立与第一用户2000之间的会话连接时,需要根据业务报文对应的协议类型,执行不同的操作。例如,如果协议网关模块110确定采用的是长连接协议,则需要创建业务报文对应的会话,并基于会话进行第一用户2000与消息队列之间的多次业务交互;如果协议网关模块110确定采用的是短连接协议,则不需要创建会话,以完成第一用户2000与消息队列之间的单次业务交互。
进一步地,调度模块140,具体用于:
获取代理模块130所属集群中的各节点的负载情况,并根据负载情况,确定对业务报文中的消息进行存储的第一目标节点;
和/或,
确定业务报文中的消息主题,并根据消息主题和第一映射关系,确定对业务报文中的消息进行分发的第二目标节点,其中,第一映射关系至少包括消息主题和代理模块130所属集群中的节点之间的映射关系。
调度模块140在确定协议网关模块110接收到业务报文为生产报文的情况下,获取代理模块130所属集群中的各节点的负载情况,并根据各节点的负载情况,将各节点中负载最小的节点作为第一目标节点,再将第一目标节点的地址返回给协议网关模块110,以便后续协议网关模块110将生产报文中的消息发送至第一目标节点进行存储。调度模块140在确定协议网关模块110接收到业务报文为订阅报文的情况下,获取订阅报文中的消息主题,根据消息主题和第一映射关系在代理模块130所属的集群中的各节点查找待订阅的消息的存储地址,并待订阅消息的存储地址所在的节点作为第二目标节点,再将第二目标节点地址返回给协议网关模块110,以便后续协议网关模块110对订阅报文中的消息从第二目标节点分发至第一用户2000。其中,上述第一映射关系至少包括消息主题和代理模块130所属集群中的节点之间的映射关系。上述代理模块130所属集群中的节点均包含有本地数据库,该代理模块130可以采用Key-Value的方式对消息进行本地化数据存储,对消息进行持久化存储。
进一步地,代理模块130,还用于在接收到第一用户2000的签收确认的情况下,调整目标节点中的消费偏移量,其中,消费偏移量用于对目标节点中已分发的消息进行标识。
代理模块130所属集群中的各节点分别包含有一个本地数据库,在本地数据库中设置有消费偏移量,通过消费偏移量对消息的分发情况做标识。代理模块130的消费模式为至少消费一次时,当第一用户2000收到推送的消息后,会向代理模块130回复对应的签收确认Acknowledge,代理模块130根据签收确认Acknowledge确认第一用户2000已经消费该消息,进而会对消费偏移量进行更新。当然,在另一实施例中,代理模块130的消费模式为最多一次的消费模式时,消息只会分发一次,代理模块130可以不接收第一用户2000的签收确认Acknowledge,均认为该消息已被消费,进而会对消费偏移量进行更新。
进一步地,消息队列系统1000还包括:应用程序接口模块150;
鉴权模块120,还用于在接收到第二用户3000的接口调用请求的情况下,对第二用户3000进行鉴权;
应用程序接口模块150,用于在第二用户3000鉴权通过的情况下,向调度模块140请求第二用户3000所需的消息队列资源。
具体地,应用程序接口模块150分别与鉴权模块120和调度模块140通讯连接。上述第二用户3000与上述第一用户2000可以是相同用户,也可以是不同用户,本申请不做具体限定。应用程序接口模块150分别与鉴权模块120和调度模块140通讯连接。当第二用户3000接入至应用程序接口模块150后,鉴权模块120会对第二用户3000进行身份鉴权,鉴权方式同第一用户2000的鉴权方式相同,在此不再赘述。在第二用户3000鉴权通过的情况下,应用程序接口模块150向调度模块140请求第二用户3000所需的消息队列资源。上述应用程序接口模块150提供一系列表述性状态传递(Representational State Transfer,简称REST)接口,这样第二用户3000可以通过这些REST接口对消息队列系统1000中的资源进行操作和访问,例如对消息队列名称MqName、消息主题Topic等信息的更新、删除、修改、查询的操作,也可以向第二用户3000提供关于消息使用量、消息生产速率、消息消费速率等统计信息的查询。
参见图2,图2为本申请实施例提供的业务处理方法的流程图之一。该业务处理方法应用于如图1所示的消息队列系统,业务处理方法包括:
步骤102、鉴权模块对第一用户进行鉴权。
在对第一用户进行鉴权前需要获取第一用户的鉴权信息,该鉴权信息包括但不限于消息队列名称MqName、认证令牌AuthToken、消息主题Topic、许可PerMission等。该鉴权模块获取到第一用户的鉴权信息后,将第一用户的鉴权信息与预设的鉴权数据库中的鉴权信息匹配,若第一用户的鉴权信息与预设的鉴权数据库中的鉴权信息匹配一致,则表示该第一用户的身份合法,可以继续进行业务交互;否则,则表示该第一用户的身份不合法,停止该第一用户的业务交互行为。
步骤104、协议网关模块在第一用户鉴权通过的情况下,接收第一用户发送的业务报文。
具体地,上述第一用户可以使用该协议网关模块所支持的多种通信协议中的任意一种通信协议来接入至协议网关模块,通过该通信协议来传输第一用户和协议网关模块之间的业务报文。此处的业务报文包括生产报文、订阅报文和取消订阅报文,其中,生产报文用于第一用户将消息存储至消息队列,订阅报文用于从消息队列中订阅消息给第一用户,取消订阅报文用于停止推送消息队列中的订阅消息给第一用户。
该协议网关模块可以支持多种通信协议接入,如消息队列遥测通信协议(MessageQueuing Telemetry Transport,简称MQTT)、增强设备协议(Enhanced Device Protocol,简称EDP)、WebSocket协议等长连接协议,也可以是超文本传输协议(Hyper Text TransferProtocol,简称HTTP)等短连接协议。第一用户可以根据自身实际情况选择某一种通信协议接入至协议网关模块,由协议网关模块接收第一用户发送的业务报文。需要说明的是,第一用户与协议网关模块之间传输的数据是按照第一用户自身使用的通信协议组装的报文,在协议网关模块中可以再按照对应的通信协议对报文数据进行解析,由此得到业务相关信息,如消息队列名称MqName、认证令牌AuthToken、消息主题Topic、消息Msg、许可PerMission等信息。
步骤106、调度模块从代理模块所属的集群中确定对业务报文中的消息进行存储和/或分发的目标节点。
在协议网关模块接收到业务报文后,协议网关模块根据对应的通信协议对该业务报文进行解析,得到该业务报文中的消息相关信息,如消息队列名称MqName、认证令牌AuthToken、消息主题Topic、消息Msg、许可PerMission等。在业务报文解析完成后,协议网关模块向调度模块发送该业务报文中消息的消息主题所对应的目标节点。具体地,在代理模块对业务报文中的消息进行存储前,调度模块可以获取代理模块所属的集群中各节点的负载情况,并根据各节点的负载情况,将各节点中负载最小的节点作为目标节点。在代理模块对业务报文中的消息进行分发前,调度模块可以获取订阅报文中的消息主题,根据消息主题在代理模块所属的集群中的各节点查找待订阅的消息的存储地址,并待订阅消息的存储地址所在的节点作为目标节点。
步骤108、代理模块在目标节点中对消息进行存储和/或分发,并在消息存储和/或分发完成的情况下,将处理结果返回给第一用户。
代理模块根据预设的消息队列配置数据对业务报文中的消息进行存储和/或分发。上述预设的消息队列配置数据包括但不限于配置消费模式、存储空间大小、消息过期时间等信息,其中,配置消费模式可以是最多一次的消费模式,也可以是至少一次的消费模式。最多一次的消费模式是指在同一个订阅下,消息只会推送一次,不需要消费侧响应确认消息。至少一次的消费模式是指在同一个订阅下,在设置了消息锁定时间后,在该锁定时间内,若无应答确认,则认为消费失败,锁定时间段之后,第一用户可以再次消费到该未被确认的消息。代理模块可以根据预设的消息队列配置数据对业务报文中的消息进行存储,以实现第一用户对消息的生产,和/或,对业务报文中的消息进行分发,以实现第一用户对消息的消费。并在业务处理完后,将处理结果返回至协议网关模块,再由协议网关模块返回给第一用户。
需要说明的是,由于协议网关模块可以支持消息队列遥测通信协议(MessageQueuing Telemetry Transport,简称MQTT)、增强设备协议(Enhanced Device Protocol,简称EDP)、WebSocket协议等长连接协议,也可以是超文本传输协议(Hyper Text TransferProtocol,简称HTTP)等短连接协议。因此,协议网关模块可以根据不同的连接方式,对会话进行管理,例如,如果协议网关模块确定采用的是短连接协议,则在将处理结果返回给第一用户后,直接断开第一用户与协议网关模块之间的连接;如果协议网关模块确定采用的是长连接协议,则在将处理结果返回给第一用户后,保留第一用户与协议网关模块之间的连接,继续等待下次业务,直到达到会话的预设时长。
在本实施例中,通过鉴权模块完成对第一用户的鉴权,协议网关模块在第一用户的鉴权通过的情况下,对第一用户进行多协议接入,并在第一用户成功接入后,通过调度模块实现消息在代理模块所属集群的各节点的存储和/或分发功能。这样可以通过各个模块所属的集群来独立完成各自对应的功能,当模块所属的集群中的某一节点出现故障时,不会导致消息队列整体不可用,从而提高了消息队列的稳定性。
进一步地,参见图3,图3是本申请实施例提供的业务处理方法的流程图之二。在上述步骤104、协议网关模块在第一用户鉴权通过的情况下,接收第一用户发送的业务报文之前,包括:
步骤101、协议网关模块接收第一用户发送的连接报文,并解析出连接报文中的鉴权信息。
上述连接报文是第一用户向协议网关模块请求接入时发送的报文,可以用于协议网关模块对第一用户进行鉴权。协议网关模块在接收到连接报文后,采用连接报文对应的通信协议对其进行解析,得到鉴权信息。其中,鉴权信息包括但不限于消息队列名称MqName、认证令牌AuthToken、消息主题Topic、许可PerMission等。
步骤103、鉴权模块根据鉴权信息,对第一用户进行鉴权。
鉴权模块获取到第一用户的鉴权信息后,将第一用户的鉴权信息与预设的鉴权数据库中的鉴权信息匹配,若第一用户的鉴权信息与预设的鉴权数据库中的鉴权信息匹配一致,则表示该第一用户的身份合法,可以继续进行业务交互;否则,则表示该第一用户的身份不合法,停止该第一用户的业务交互行为。
在本实施例中,通过鉴权模块对第一用户进行鉴权,使得只有鉴权通过的第一用户才能接入至消息队列系统进行业务处理,从而提高了消息队列系统的业务处理的安全性。
进一步地,在上述步骤102、协议网关模块在第一用户鉴权通过的情况下,接收第一用户发送的业务报文之后,包括:
协议网关模块确定业务报文对应的协议类型;
在协议类型为长连接的情况下,创建业务报文对应的会话。
具体地,由于协议网关模块可以支持消息队列遥测通信协议(Message QueuingTelemetry Transport,简称MQTT)、增强设备协议(Enhanced Device Protocol,简称EDP)、WebSocket协议等长连接协议,也可以是超文本传输协议(Hyper Text TransferProtocol,简称HTTP)等短连接协议。因此,协议网关模块可以根据不同的连接方式与第一用户建立连接,因而在建立与第一用户之间的会话连接时,需要根据业务报文对应的协议类型,执行不同的操作。例如,如果协议网关模块确定采用的是长连接协议,则需要创建业务报文对应的会话,并基于会话执行上述步骤106。如果协议网关模块确定采用的是短连接协议,则直接执行上述步骤106。
在本实施例中,通过协议网关模块可同时支持长连接和短连接两种方式,并在长连接时对第一用户的会话进行管理,从而保证业务的正常进行。
进一步地,上述步骤104、调度模块确定对业务报文中的消息进行存储和/或分发的目标节点,包括:
调度模块获取代理模块所属集群中的各节点的负载情况,并根据负载情况,确定对业务报文中的消息进行存储的第一目标节点;
和/或,
调度模块确定业务报文中的消息主题,并根据消息主题和第一映射关系,确定对业务报文中的消息进行分发的第二目标节点,其中,第一映射关系至少包括消息主题和代理模块所属集群中的节点之间的映射关系。
具体地,在消息生产阶段,也就是第一用户需要将消息存储至代理模块所属集群的各节点中的阶段,调度模块会获取代理模块所属集群的中各节点的负载情况,并根据各节点的负载情况,选取出各节点中负载最小的节点,并将负载最小的节点作为第一目标节点,以便协议网关模块将生产报文中的消息发送至第一目标节点进行存储。
在消息消费阶段,也就是将代理模块所属集群的各节点中的消息分发至第一用户的阶段,调度模块会获取业务报文中的消息主题,根据消息主题和第一映射关系,在代理模块中查找待订阅的消息的存储地址,并待订阅消息的存储地址所在的节点作为第二目标节点,以便协议网关模块对订阅报文中的消息从第二目标节点分发至第一用户。
在本实施例中,通过调度模块对代理模块所属集群的各节点进行调度,确定用于消息生产的第一目标节点,和用于消息消费的第二目标节点,以使第一用户可以在第一目标节点进行消息生产,和/或在第二目标节点进行消息消费,同时,保证代理模块中各节点的负载均衡,提高业务处理效率。
进一步地,在上述步骤106、将处理结果返回给第一用户之后,包括:
在代理模块接收到第一用户的签收确认的情况下,调整目标节点中的消费偏移量,其中,消费偏移量用于对目标节点中已分发的消息进行标识。
在本实施例中,代理模块所属集群中的各节点中的本地数据库中设置有消费偏移量,通过消费偏移量对消息的分发情况做标识。代理模块的消费模式为至少消费一次时,当第一用户收到推送的消息后,会向代理模块回复对应的签收确认Acknowledge,代理模块根据签收确认Acknowledge确认第一用户已经消费该消息,进而会对消费偏移量进行更新。当然,在另一实施例中,代理模块的消费模式为最多一次的消费模式时,消息只会分发一次,代理模块可以不接收第一用户的签收确认Acknowledge,均认为该消息已被消费,进而会对消费偏移量进行更新。
在本实施例中,由于通过消息偏移量对已被消费的消息进行标识,而不需要在本地数据库中保存完整的消息相关信息,简化了对消息的持久化存储管理,并减少了数据库中的冗余数据,提高了本地数据库的访问效率。
进一步地,业务处理方法还包括:
鉴权模块在接收到第二用户的接口调用请求的情况下,对第二用户进行鉴权;
应用程序接口模块在第二用户鉴权通过的情况下,向调度模块请求第二用户所需的消息队列资源。
具体地,应用程序接口模块分别与鉴权模块和调度模块通讯连接。上述第二用户与上述第一用户可以是相同用户,也可以是不同用户,本申请不做具体限定。应用程序接口模块分别与鉴权模块和调度模块通讯连接。当第二用户接入至应用程序接口模块后,鉴权模块会对第二用户进行身份鉴权,鉴权方式同第一用户的鉴权方式相同,在此不再赘述。在第二用户鉴权通过的情况下,应用程序接口模块向调度模块请求第二用户所需的消息队列资源。上述应用程序接口模块提供一系列表述性状态传递(Representational StateTransfer,简称REST)接口,这样第二用户可以通过这些REST接口对消息队列系统中的资源进行操作和访问,例如对消息队列名称MqName、消息主题Topic等信息的更新、删除、修改、查询的操作,也可以向第二用户提供关于消息使用量、消息生产速率、消息消费速率等统计信息的查询。
参见图4,图4为本申请实施例提供的第一用户与消息队列系统的交互流程示意图。如图4所示,该交互流程具体包含如下步骤:
步骤401、第一用户向协议网关模块发送连接报文;
步骤402、协议网关模块接收到连接报文后,解析出连接报文中的鉴权信息,向鉴权模块发送鉴权信息;
步骤403、鉴权模块对第一用户进行鉴权,并返回鉴权结果给协议网关模块;
步骤404、协议网关模块在接收到第一用户鉴权通过的情况下,根据第一用户使用的通信协议建立长连接或者短连接;
当通信协议为长连接协议时,协议网关模块需要先创建第一用户的会话,并在创建完会话后向第一用户返回连接情况,再执行步骤405。当通信协议为短连接协议时,直接执行步骤405;
步骤405、第一用户向协议网关模块发送业务报文,并由协议网关模块从业务报文中解析业务数据;
在协议网关模块在对业务报文解析后,如果为长连接,则执行步骤406,并在执行完步骤406后,执行步骤407;如果为短连接,直接执行步骤407。
步骤406、协议网关模块查找该业务数据对应的会话;
步骤407、协议网关模块向调度模块发送目标节点查询请求;
步骤408、调度模块根据代理模块所属集群中的各节点的负载情况,确定目标节点,并向协议网关模块返回目标节点地址;
步骤409、协议网关模块向代理模块所属集群中的目标节点发送业务数据;
步骤410、目标节点处理对应的业务,并在处理完后,向协议网关模块返回处理结果;
步骤411、协议网关模块向第一用户返回处理结果;
此时,第一用户接收到处理结果,如果第一用户为短连接,则直接断开连接,结束本次业务处理流程,如果第一用户为长连接,则协议网关模块保持该第一用户的会话,继续等待下次业务。
在本实施例中,通过消息队列系统中的协议网关模块,对第一用户进行多协议接入,并在第一用户成功接入后,通过协议网关模块、调度模块和代理模块共同完成消息的存储和/或分发功能,由此实现了消息队列中的业务交互过程。由于消息队列系统中的各个功能模块是独立开来的,通过各功能模块独立完成各自对应的功能,由此在消息队列中的某一功能模块出现故障时,不会导致消息队列整体不可用,从而提高了消息队列的稳定性。
本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述业务处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
Claims (11)
1.一种消息队列系统,其特征在于,所述消息队列系统包括:协议网关模块、鉴权模块、代理模块和调度模块;其中,所述协议网关模块、所述鉴权模块、所述代理模块和所述调度模块分别部署在各自对应的集群中;
所述鉴权模块,用于对第一用户进行鉴权;
所述协议网关模块,用于在所述第一用户鉴权通过的情况下,接收所述第一用户发送的业务报文;
所述调度模块,用于从所述代理模块所属的集群中确定对所述业务报文中的消息进行存储和/或分发的目标节点;
所述代理模块,用于在所述目标节点中对所述消息进行存储和/或分发,并在所述消息存储和/或分发完成的情况下,将处理结果返回给所述第一用户;
所述调度模块,具体用于:
获取所述代理模块所属集群中的各节点的负载情况,并根据所述负载情况,确定对所述业务报文中的消息进行存储的第一目标节点;其中,所述第一目标节点为各节点中负载最小的节点;
和/或,
确定所述业务报文中的消息主题,并根据所述消息主题和第一映射关系,确定对所述业务报文中的消息进行分发的第二目标节点,所述第二目标节点为待订阅消息的存储地址所在的节点,其中,所述第一映射关系至少包括所述消息主题和所述代理模块所属集群中的节点之间的映射关系;
所述调度模块还用于对代理模块所属的集群中的各节点的本地数据库中的、消息主题和本地数据库之间的映射关系进行管理维护;和,用于对代理模块所属的集群中各节点的数据一致性进行管理。
2.根据权利要求1所述的消息队列系统,其特征在于,所述协议网关模块,还用于接收所述第一用户发送的连接报文,并解析出所述连接报文中的鉴权信息;
所述鉴权模块,具体用于根据所述鉴权信息,对所述第一用户进行鉴权。
3.根据权利要求1所述的消息队列系统,其特征在于,所述协议网关模块,还用于:
确定所述业务报文对应的协议类型;
在所述协议类型为长连接的情况下,创建所述业务报文对应的会话。
4.根据权利要求1所述的消息队列系统,其特征在于,所述代理模块,还用于:
在接收到所述第一用户的签收确认的情况下,调整所述目标节点中的消费偏移量,其中,所述消费偏移量用于对所述目标节点中已分发的消息进行标识。
5.根据权利要求1所述的消息队列系统,其特征在于,所述消息队列系统还包括:应用程序接口模块;
所述鉴权模块,还用于在接收到第二用户的接口调用请求的情况下,对所述第二用户进行鉴权;
所述应用程序接口模块,用于在所述第二用户鉴权通过的情况下,向所述调度模块请求所述第二用户所需的消息队列资源。
6.一种业务处理方法,其特征在于,所述业务处理方法应用于如权利要求1至5中任一所述的消息队列系统,所述业务处理方法包括:
所述鉴权模块对第一用户进行鉴权;
所述协议网关模块在所述第一用户鉴权通过的情况下,接收所述第一用户发送的业务报文;
所述调度模块从所述代理模块所属的集群中确定对所述业务报文中的消息进行存储和/或分发的目标节点;
所述代理模块在所述目标节点中对所述消息进行存储和/或分发,并在所述消息存储和/或分发完成的情况下,将处理结果返回给所述第一用户;
所述调度模块确定对所述业务报文中的消息进行存储和/或分发的目标节点,包括:
所述调度模块获取所述代理模块所属集群中的各节点的负载情况,并根据所述负载情况,确定对所述业务报文中的消息进行存储的第一目标节点;
和/或,
所述调度模块确定所述业务报文中的消息主题,并根据所述消息主题和第一映射关系,确定对所述业务报文中的消息进行分发的第二目标节点,其中,所述第一映射关系至少包括所述消息主题和所述代理模块所属集群中的节点之间的映射关系;
所述调度模块还用于对代理模块所属的集群中的各节点的本地数据库中的、消息主题和本地数据库之间的映射关系进行管理维护;和,用于对代理模块所属的集群中各节点的数据一致性进行管理。
7.根据权利要求6所述的业务处理方法,其特征在于,在所述鉴权模块对第一用户进行鉴权之前,包括:
所述协议网关模块接收所述第一用户发送的连接报文,并解析出所述连接报文中的鉴权信息;
所述鉴权模块对第一用户进行鉴权,包括:
所述鉴权模块根据所述鉴权信息,对所述第一用户进行鉴权。
8.根据权利要求6所述的业务处理方法,其特征在于,在所述协议网关模块在所述第一用户鉴权通过的情况下,接收所述第一用户发送的业务报文之后,包括:
所述协议网关模块确定所述业务报文对应的协议类型;
在所述协议类型为长连接的情况下,创建所述业务报文对应的会话。
9.根据权利要求6所述的业务处理方法,其特征在于,在所述将处理结果返回给所述第一用户之后,包括:
在所述代理模块接收到所述第一用户的签收确认的情况下,调整所述目标节点中的消费偏移量,其中,所述消费偏移量用于对所述目标节点中已分发的消息进行标识。
10.根据权利要求6所述的业务处理方法,其特征在于,所述业务处理方法还包括:
所述鉴权模块在接收到第二用户的应用程序接口调用请求的情况下,对所述第二用户进行鉴权;
所述应用程序接口模块在所述第二用户鉴权通过的情况下,向所述调度模块请求所述第二用户所需的消息队列资源。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求6至10中任一项所述的业务处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011050143.5A CN114338063B (zh) | 2020-09-29 | 2020-09-29 | 消息队列系统、业务处理方法及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011050143.5A CN114338063B (zh) | 2020-09-29 | 2020-09-29 | 消息队列系统、业务处理方法及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114338063A CN114338063A (zh) | 2022-04-12 |
CN114338063B true CN114338063B (zh) | 2023-11-10 |
Family
ID=81010934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011050143.5A Active CN114338063B (zh) | 2020-09-29 | 2020-09-29 | 消息队列系统、业务处理方法及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114338063B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115225715B (zh) * | 2022-06-30 | 2024-01-26 | 深圳市云洲创新科技有限公司 | 一种数据交互方法及数据交互系统 |
CN115334155B (zh) * | 2022-08-12 | 2024-04-19 | 中国建设银行股份有限公司 | 一种消息队列代理方法和装置 |
CN115118708B (zh) * | 2022-08-25 | 2023-01-03 | 飞狐信息技术(天津)有限公司 | 一种消息中间件的http协议代理方法及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103581307A (zh) * | 2013-10-17 | 2014-02-12 | 北京邮电大学 | 一种基于集群的发布/订阅系统及其可靠性保障方法 |
CN104092767A (zh) * | 2014-07-21 | 2014-10-08 | 北京邮电大学 | 一种增加消息队列模型的发布/订阅系统及其工作方法 |
CN105681462A (zh) * | 2016-03-14 | 2016-06-15 | 南京邮电大学 | 一种基于消息路由的集群系统及数据通信中转方法 |
CN108282514A (zh) * | 2017-12-12 | 2018-07-13 | 北京奇艺世纪科技有限公司 | 一种分布式业务建立方法及装置 |
CN109660607A (zh) * | 2018-12-05 | 2019-04-19 | 北京金山云网络技术有限公司 | 一种业务请求分发方法、接收方法、装置及服务器集群 |
CN111459689A (zh) * | 2020-04-07 | 2020-07-28 | 中国建设银行股份有限公司 | 基于分布式队列的消息处理系统及方法 |
CN111506390A (zh) * | 2020-03-31 | 2020-08-07 | 新浪网技术(中国)有限公司 | 一种基于容器化部署的视频转码调度方法及系统 |
CN111711663A (zh) * | 2020-05-26 | 2020-09-25 | 北京金山云网络技术有限公司 | 发布及订阅服务的处理方法、装置及电子设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104978232A (zh) * | 2014-04-09 | 2015-10-14 | 阿里巴巴集团控股有限公司 | 用于实时流式计算的计算资源扩容、释放方法及其装置 |
US10462067B2 (en) * | 2017-01-26 | 2019-10-29 | International Business Machines Corporation | Proactive channel agent |
-
2020
- 2020-09-29 CN CN202011050143.5A patent/CN114338063B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103581307A (zh) * | 2013-10-17 | 2014-02-12 | 北京邮电大学 | 一种基于集群的发布/订阅系统及其可靠性保障方法 |
CN104092767A (zh) * | 2014-07-21 | 2014-10-08 | 北京邮电大学 | 一种增加消息队列模型的发布/订阅系统及其工作方法 |
CN105681462A (zh) * | 2016-03-14 | 2016-06-15 | 南京邮电大学 | 一种基于消息路由的集群系统及数据通信中转方法 |
CN108282514A (zh) * | 2017-12-12 | 2018-07-13 | 北京奇艺世纪科技有限公司 | 一种分布式业务建立方法及装置 |
CN109660607A (zh) * | 2018-12-05 | 2019-04-19 | 北京金山云网络技术有限公司 | 一种业务请求分发方法、接收方法、装置及服务器集群 |
CN111506390A (zh) * | 2020-03-31 | 2020-08-07 | 新浪网技术(中国)有限公司 | 一种基于容器化部署的视频转码调度方法及系统 |
CN111459689A (zh) * | 2020-04-07 | 2020-07-28 | 中国建设银行股份有限公司 | 基于分布式队列的消息处理系统及方法 |
CN111711663A (zh) * | 2020-05-26 | 2020-09-25 | 北京金山云网络技术有限公司 | 发布及订阅服务的处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN114338063A (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114338063B (zh) | 消息队列系统、业务处理方法及计算机可读存储介质 | |
CN108650262B (zh) | 一种基于微服务架构的云平台扩展方法及系统 | |
US20050228895A1 (en) | Method, Web service gateway (WSG) for presence, and presence server for presence information filtering and retrieval | |
KR102208935B1 (ko) | 데이터 교환을 위한 컨텍스트를 설정하는 http 프로토콜을 통한 메시징 api | |
US8972593B2 (en) | Load sharing method, load sharing system and access server | |
US8738770B2 (en) | Sending synchronous responses to requests from frontend applications | |
CN103795689A (zh) | 资源订阅方法及装置 | |
CN107528891B (zh) | 一种基于WebSocket的自动集群方法及其系统 | |
CN110808948B (zh) | 远程过程调用方法、装置及系统 | |
CN112711635B (zh) | 一种分布式物联设备跨区域数据一致性的方法和服务集群 | |
CN111343286A (zh) | 一种网络接入系统及网络接入方法 | |
CN111124717A (zh) | 消息投递方法、系统及计算机存储介质 | |
WO2014015525A1 (zh) | 一种用户在线状态的查询方法和装置 | |
CN101753561B (zh) | 业务的集群处理方法及集群系统 | |
CN107343285B (zh) | 一种管理设备及设备管理方法 | |
WO2017032110A1 (zh) | 一种应用消息的处理系统、方法及应用设备 | |
WO2019201111A1 (zh) | 信息处理方法、装置、设备及计算机可读存储介质 | |
CN109962834B (zh) | 信息处理方法、系统、终端和计算机存储介质 | |
CN114025005B (zh) | 一种数据通讯方法、系统、电子设备及存储介质 | |
CN111385324A (zh) | 一种数据通信方法、装置、设备和存储介质 | |
CN114257578A (zh) | 信息验证方法及装置 | |
CN114390097A (zh) | 基于消息队列的区块链运行方法、系统及其应用 | |
KR100640512B1 (ko) | 메신저 서비스 시스템을 이용한 서버와 사용자 단말기간에 데이터 동기화 방법 및 그 시스템 | |
CN105376727A (zh) | 数据卡处理方法及装置 | |
US11470454B2 (en) | Systems and methods for improved access to user data |
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 |