一种订阅和发布主题消息的方法技术

技术编号:10115466 阅读:128 留言:0更新日期:2014-06-04 19:50
本申请公开了订阅和发布主题消息的方法,通过计算消息中间件中订阅主题的哈希值来确定具体的消息中间件的服务端,并且在消息中间件的客户端订阅一个主题时,为其配置两个服务端。采用本发明专利技术,使得能够订阅的消息数量可以横向的无限扩展,同时还可以防止某一类主题消息的单点故障,提高消息中间件的可靠性。

【技术实现步骤摘要】
一种订阅和发布主题消息的方法
本专利技术涉及分布式系统技术,特别是涉及一种分布式系统中订阅和发布主题消息的方法。
技术介绍
在分布式系统中,客户端与服务器端之间交互的信息是通过消息中间件进行转发的。当消息中间件的客户端需要订阅一个主题时,客户端将随机选择一个中间件的服务端与其建立连接,并将订阅主题的消息发送给所选择的服务端。该服务端收到订阅主题的消息后,会把这条订阅信息发布给其他消息中间件服务端,以实现订阅信息在各服务端的同步。为了保证各个消息中间件服务端订阅主题的一致性和完整性,在同步订阅信息的时候需要对每一个消息中间件服务端加分布式锁,保证同步订阅主题全部成功以后才返回给客户端订阅成功。当消息中间件的客户端需要发布一个主题的消息时,系统将为其任意选择一个消息中间件的服务端进行该主题的消息发布,然后再由所选择的服务端将主题同步到其他服务端。在进行主题发布时,消息中间件的客户端通常使用域名或者vip访问消息中间件的服务端,这样,就可以确保所选择进行发布主题的服务端的有效性,从而可以避免由于进行主题发布的服务端的不可用性而导致的主题发布失败情况的发生(即发生单点问题)。上述传统的订阅和发布主题的方法,利用分布式通信和分布式锁实现多个消息中间件实例(即服务端)对等,从而达到横向扩展(即扩展提供服务的服务端数量,以增强系统的可靠性)以及防止单点的目的。但是随着服务端数量增多,就会导致利用分布式锁进行锁定服务端的时延增加,从而会使得不可控的场景增多,保证数据一致性的复杂度也是线性增长,进而影响系统的整体性能。由此可见,传统订阅和发布主题的方法受限于服务端的规模,不能实现横向扩展。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种订阅和发布主题消息的方法,该方法可以在应用实例的规模较大时实现横向扩展、提高系统性能。为了达到上述目的,本专利技术提出的技术方案为:一种订阅和发布主题消息的方法,包括:为系统中的每个消息中间件配置服务器作为该消息中间件的服务端,并为每个所述服务端配置一个哈希区间,其中,不同服务端所配置的哈希区间不相同;当消息中间件的客户端订阅一个主题时,请求其所属消息中间件的服务端确定用于接收订阅所述主题的消息的服务端,其所属消息中间件的服务端根据所述主题的内容按照预设的哈希算法计算出相应的哈希值,将该哈希值所在的所述哈希区间对应的服务端F1以及与所述服务端F1的IP地址相邻的下一个服务端F2,作为用于接收订阅所述主题的消息的服务端并通知给所述客户端;所述客户端根据该通知将订阅所述主题的消息发送给所述服务端F1和所述服务端F2;当消息中间件的客户端发布一个主题的消息时,请求任意一个中间件的服务端确定用于发布所述主题的消息的服务端,接收到所述请求的服务端根据所要发布的主题的内容,按照所述哈希算法计算出相应的哈希值,将该哈希值所在的所述哈希区间对应的服务端F3作为用于发布所述主题的消息的服务端,并通知给所述客户端;所述客户端根据该通知将需要发布的所述主题的消息发送给所述服务端F3。综上所述,本专利技术提出的订阅和发布主题消息的方法,通过计算消息中间件中订阅主题的哈希值,来确定具体的消息中间件的服务端,使得能够订阅的消息数量可以横向的无限扩展,并且在消息中间件的客户端订阅一个主题时,为其配置两个服务端,如此,可以防止某一类主题消息的单点故障,从而可以提高消息中间件的可靠性。附图说明图1为本专利技术实施例一的流程示意图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本专利技术作进一步地详细描述。本专利技术的核心思想是:通过计算消息中间件中订阅主题的哈希值来确定具体的消息中间件的服务端,可以使能够订阅的消息数量横向的无限扩展,并且在消息中间件的客户端订阅一个主题时,为其配置两个服务端,如此,可以防止某一类主题消息的单点故障,从而可以提高消息中间件的可靠性。图1为本专利技术实施例一的流程示意图,如图1所示,该实施例主要包括:步骤101、为系统中的每个消息中间件配置服务器作为该消息中间件的服务端,并为每个所述服务端配置一个哈希区间,其中,不同服务端所配置的哈希区间不相同。较佳地,可以采用下述方法为每个所述服务端配置一个哈希区间:对于第m个服务端,将其哈希区间配置为其中,n为服务端数量,[x,y]为预设的哈希区间总范围,进行配置时将该范围内划分为n份,分别分配给每个服务端。步骤102、当消息中间件的客户端订阅一个主题时,请求其所属消息中间件的服务端确定用于接收订阅所述主题的消息的服务端,其所属消息中间件的服务端根据所述主题的内容按照预设的哈希算法计算出相应的哈希(hash)值,将该哈希值所在的所述哈希区间对应的服务端F1以及与所述服务端F1的IP地址相邻的下一个服务端F2,作为用于接收订阅所述主题的消息的服务端并通知给所述客户端;所述客户端根据该通知将订阅所述主题的消息发送给所述服务端F1和所述服务端F2。本步骤中确定用于接收所订阅主题的消息的服务端时,将根据该主题的内容按照指定的哈希算法计算出相应的哈希值,以利用该哈希值确定出对应的服务端。这里具体的哈希算法可由本领域技术人员根据实际需要进行设置,具体设置方法为本领域技术人员所掌握在此不再赘述。另外,同现有技术一样,对于一个哈希值,其所在的哈希区间将通过一映射函数进行确定,具体方法为本领域技术人员所掌握,在此不再赘述。这里需要说明的是,本步骤中客户端将订阅主题的消息发送给两个服务端,能够有效防止单点,同时,还可以实现消息订阅与发布主题无缝迁移,即,如果消息中间件的第n个服务端不能正常运行了,那么以前和第n个服务端建立连接并且通信的客户端将不需要其他干预软件的介入而自动连接到第n+1个服务端。步骤103、当消息中间件的客户端发布一个主题的消息时,请求任意一个中间件的服务端确定用于发布所述主题的消息的服务端,接收到所述请求的服务端根据所要发布的主题的内容,按照所述哈希算法计算出相应的哈希(hash)值,将该哈希值所在的所述哈希区间对应的服务端F3作为用于发布所述主题的消息的服务端并通知给所述客户端;所述客户端根据该通知将需要发布的所述主题的消息发送给所述服务端F3。在实际应用中,所述请求任意一个中间件的服务端可以采用下述方法实现:所述客户端通过域名或者vip的方式访问所有的消息中间件的服务端,如此,系统会选择任意一个当前可用的服务端提供给客户端,从而可以避免由于服务端不可用而导致的单点问题。考虑到实际应用中可能会存在一些服务端不能正常运行的情况,针对该情况,为了确保主题消息发布和订阅的正常性,客户端可以通过周期性的检查服务端的工作状态,并在检查到服务端不可用时重新选择新的服务端进行相应的主题的订阅和消息的发布。具体地,可以采用下述方法实现这一目的:客户端在每个预设的检查周期,检查当前用于订阅主题和发布主题消息的每个服务端是否可用,如果检查到所述检查周期内一个服务端不可用的次数达到预设的门限值W,则重新请求确定相应的用于发布主题消息或订阅主题的服务端。考虑到实际应用中可能会存在由于系统中新增加了服务端而导致各服务端的哈希区间发生变化的情况,针对该情况,客户端可以通过周期性地检查该情况的发生,并对相应的主题与服务端之间映射关系进行更新。具体地,可以采用本文档来自技高网
...
一种订阅和发布主题消息的方法

【技术保护点】
一种订阅和发布主题消息的方法,其特征在于,包括:为系统中的每个消息中间件配置服务器作为该消息中间件的服务端,并为每个所述服务端配置一个哈希区间,其中,不同服务端所配置的哈希区间不相同;当消息中间件的客户端订阅一个主题时,请求其所属消息中间件的服务端确定用于接收订阅所述主题的消息的服务端,其所属消息中间件的服务端根据所述主题的内容按照预设的哈希算法计算出相应的哈希值,将该哈希值所在的所述哈希区间对应的服务端F1以及与所述服务端F1的IP地址相邻的下一个服务端F2,作为用于接收订阅所述主题的消息的服务端并通知给所述客户端;所述客户端根据该通知将订阅所述主题的消息发送给所述服务端F1和所述服务端F2;当消息中间件的客户端发布一个主题的消息时,请求任意一个中间件的服务端确定用于发布所述主题的消息的服务端,接收到所述请求的服务端根据所要发布的主题的内容,按照所述哈希算法计算出相应的哈希值,将该哈希值所在的所述哈希区间对应的服务端F3作为用于发布所述主题的消息的服务端,并通知给所述客户端;所述客户端根据该通知将需要发布的所述主题的消息发送给所述服务端F3。

【技术特征摘要】
1.一种订阅和发布主题消息的方法,其特征在于,包括:为系统中的每个消息中间件配置服务器作为该消息中间件的服务端,并为每个所述服务端配置一个哈希区间,其中,不同服务端所配置的哈希区间不相同;当消息中间件的客户端订阅一个主题时,请求其所属消息中间件的服务端确定用于接收订阅所述主题的消息的服务端,其所属消息中间件的服务端根据所述主题的内容按照预设的哈希算法计算出相应的哈希值,将该哈希值所在的所述哈希区间对应的服务端F1以及与所述服务端F1的IP地址相邻的下一个服务端F2,作为用于接收订阅所述主题的消息的服务端并通知给所述客户端;所述客户端根据该通知将订阅所述主题的消息发送给所述服务端F1和所述服务端F2;当消息中间件的客户端发布一个主题的消息时,请求任意一个中间件的服务端确定用于发布所述主题的消息的服务端,接收到所述请求的服务端根据所要发布的主题的内容,按照所述哈希算法计算出相应的哈希值,将该哈希值所在的所述哈希区间对应的服务端F3作为用于发布所述主题的消息的服务端,并通知给所述客户端;所述客户端根据该通知将需...

【专利技术属性】
技术研发人员:吴友强
申请(专利权)人:北京京东尚科信息技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1