CN103841206A - 一种订阅和发布主题消息的方法 - Google Patents
一种订阅和发布主题消息的方法 Download PDFInfo
- Publication number
- CN103841206A CN103841206A CN201410098109.3A CN201410098109A CN103841206A CN 103841206 A CN103841206 A CN 103841206A CN 201410098109 A CN201410098109 A CN 201410098109A CN 103841206 A CN103841206 A CN 103841206A
- Authority
- CN
- China
- Prior art keywords
- service end
- message
- theme
- hash
- client
- 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.)
- Granted
Links
Images
Landscapes
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了订阅和发布主题消息的方法,通过计算消息中间件中订阅主题的哈希值来确定具体的消息中间件的服务端,并且在消息中间件的客户端订阅一个主题时,为其配置两个服务端。采用本发明,使得能够订阅的消息数量可以横向的无限扩展,同时还可以防止某一类主题消息的单点故障,提高消息中间件的可靠性。
Description
技术领域
本发明涉及分布式系统技术,特别是涉及一种分布式系统中订阅和发布主题消息的方法。
背景技术
在分布式系统中,客户端与服务器端之间交互的信息是通过消息中间件进行转发的。
当消息中间件的客户端需要订阅一个主题时,客户端将随机选择一个中间件的服务端与其建立连接,并将订阅主题的消息发送给所选择的服务端。该服务端收到订阅主题的消息后,会把这条订阅信息发布给其他消息中间件服务端,以实现订阅信息在各服务端的同步。为了保证各个消息中间件服务端订阅主题的一致性和完整性,在同步订阅信息的时候需要对每一个消息中间件服务端加分布式锁,保证同步订阅主题全部成功以后才返回给客户端订阅成功。
当消息中间件的客户端需要发布一个主题的消息时,系统将为其任意选择一个消息中间件的服务端进行该主题的消息发布,然后再由所选择的服务端将主题同步到其他服务端。在进行主题发布时,消息中间件的客户端通常使用域名或者vip访问消息中间件的服务端,这样,就可以确保所选择进行发布主题的服务端的有效性,从而可以避免由于进行主题发布的服务端的不可用性而导致的主题发布失败情况的发生(即发生单点问题)。
上述传统的订阅和发布主题的方法,利用分布式通信和分布式锁实现多个消息中间件实例(即服务端)对等,从而达到横向扩展(即扩展提供服务的服务端数量,以增强系统的可靠性)以及防止单点的目的。但是随着服务端数量增多,就会导致利用分布式锁进行锁定服务端的时延增加,从而会使得不可控的场景增多,保证数据一致性的复杂度也是线性增长,进而影响系统的整体性能。由此可见,传统订阅和发布主题的方法受限于服务端的规模,不能实现横向扩展。
发明内容
有鉴于此,本发明的主要目的在于提供一种订阅和发布主题消息的方法,该方法可以在应用实例的规模较大时实现横向扩展、提高系统性能。
为了达到上述目的,本发明提出的技术方案为:
一种订阅和发布主题消息的方法,包括:
为系统中的每个消息中间件配置服务器作为该消息中间件的服务端,并为每个所述服务端配置一个哈希区间,其中,不同服务端所配置的哈希区间不相同;
当消息中间件的客户端订阅一个主题时,请求其所属消息中间件的服务端确定用于接收订阅所述主题的消息的服务端,其所属消息中间件的服务端根据所述主题的内容按照预设的哈希算法计算出相应的哈希值,将该哈希值所在的所述哈希区间对应的服务端F1以及与所述服务端F1的IP地址相邻的下一个服务端F2,作为用于接收订阅所述主题的消息的服务端并通知给所述客户端;所述客户端根据该通知将订阅所述主题的消息发送给所述服务端F1和所述服务端F2;
当消息中间件的客户端发布一个主题的消息时,请求任意一个中间件的服务端确定用于发布所述主题的消息的服务端,接收到所述请求的服务端根据所要发布的主题的内容,按照所述哈希算法计算出相应的哈希值,将该哈希值所在的所述哈希区间对应的服务端F3作为用于发布所述主题的消息的服务端,并通知给所述客户端;所述客户端根据该通知将需要发布的所述主题的消息发送给所述服务端F3。
综上所述,本发明提出的订阅和发布主题消息的方法,通过计算消息中间件中订阅主题的哈希值,来确定具体的消息中间件的服务端,使得能够订阅的消息数量可以横向的无限扩展,并且在消息中间件的客户端订阅一个主题时,为其配置两个服务端,如此,可以防止某一类主题消息的单点故障,从而可以提高消息中间件的可靠性。
附图说明
图1为本发明实施例一的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
本发明的核心思想是:通过计算消息中间件中订阅主题的哈希值来确定具体的消息中间件的服务端,可以使能够订阅的消息数量横向的无限扩展,并且在消息中间件的客户端订阅一个主题时,为其配置两个服务端,如此,可以防止某一类主题消息的单点故障,从而可以提高消息中间件的可靠性。
图1为本发明实施例一的流程示意图,如图1所示,该实施例主要包括:
步骤101、为系统中的每个消息中间件配置服务器作为该消息中间件的服务端,并为每个所述服务端配置一个哈希区间,其中,不同服务端所配置的哈希区间不相同。
较佳地,可以采用下述方法为每个所述服务端配置一个哈希区间:
步骤102、当消息中间件的客户端订阅一个主题时,请求其所属消息中间件的服务端确定用于接收订阅所述主题的消息的服务端,其所属消息中间件的服务端根据所述主题的内容按照预设的哈希算法计算出相应的哈希(hash)值,将该哈希值所在的所述哈希区间对应的服务端F1以及与所述服务端F1的IP地址相邻的下一个服务端F2,作为用于接收订阅所述主题的消息的服务端并通知给所述客户端;所述客户端根据该通知将订阅所述主题的消息发送给所述服务端F1和所述服务端F2。
本步骤中确定用于接收所订阅主题的消息的服务端时,将根据该主题的内容按照指定的哈希算法计算出相应的哈希值,以利用该哈希值确定出对应的服务端。这里具体的哈希算法可由本领域技术人员根据实际需要进行设置,具体设置方法为本领域技术人员所掌握在此不再赘述。另外,同现有技术一样,对于一个哈希值,其所在的哈希区间将通过一映射函数进行确定,具体方法为本领域技术人员所掌握,在此不再赘述。
这里需要说明的是,本步骤中客户端将订阅主题的消息发送给两个服务端,能够有效防止单点,同时,还可以实现消息订阅与发布主题无缝迁移,即,如果消息中间件的第n个服务端不能正常运行了,那么以前和第n个服务端建立连接并且通信的客户端将不需要其他干预软件的介入而自动连接到第n+1个服务端。
步骤103、当消息中间件的客户端发布一个主题的消息时,请求任意一个中间件的服务端确定用于发布所述主题的消息的服务端,接收到所述请求的服务端根据所要发布的主题的内容,按照所述哈希算法计算出相应的哈希(hash)值,将该哈希值所在的所述哈希区间对应的服务端F3作为用于发布所述主题的消息的服务端并通知给所述客户端;所述客户端根据该通知将需要发布的所述主题的消息发送给所述服务端F3。
在实际应用中,所述请求任意一个中间件的服务端可以采用下述方法实现:
所述客户端通过域名或者vip的方式访问所有的消息中间件的服务端,如此,系统会选择任意一个当前可用的服务端提供给客户端,从而可以避免由于服务端不可用而导致的单点问题。
考虑到实际应用中可能会存在一些服务端不能正常运行的情况,针对该情况,为了确保主题消息发布和订阅的正常性,客户端可以通过周期性的检查服务端的工作状态,并在检查到服务端不可用时重新选择新的服务端进行相应的主题的订阅和消息的发布。具体地,可以采用下述方法实现这一目的:
客户端在每个预设的检查周期,检查当前用于订阅主题和发布主题消息的每个服务端是否可用,如果检查到所述检查周期内一个服务端不可用的次数达到预设的门限值W,则重新请求确定相应的用于发布主题消息或订阅主题的服务端。
考虑到实际应用中可能会存在由于系统中新增加了服务端而导致各服务端的哈希区间发生变化的情况,针对该情况,客户端可以通过周期性地检查该情况的发生,并对相应的主题与服务端之间映射关系进行更新。具体地,可以采用下述方法实现这一目的:
客户端在每个所述检查周期,对于当前所订阅和发布消息的每个主题,重新请求用于相应的主题订阅和主题消息发布的服务端,并且将所请求的服务端与本地当前保存的相应服务端进行比较,如果不同,则将本地保存的用于相应的主题订阅和主题消息发布的服务端设置为所请求的服务端。
上述步骤中重新请求用于相应的主题订阅和主题消息发布的服务端的具体方法同前述步骤102和103,在此不再赘述。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种订阅和发布主题消息的方法,其特征在于,包括:
为系统中的每个消息中间件配置服务器作为该消息中间件的服务端,并为每个所述服务端配置一个哈希区间,其中,不同服务端所配置的哈希区间不相同;
当消息中间件的客户端订阅一个主题时,请求其所属消息中间件的服务端确定用于接收订阅所述主题的消息的服务端,其所属消息中间件的服务端根据所述主题的内容按照预设的哈希算法计算出相应的哈希值,将该哈希值所在的所述哈希区间对应的服务端F1以及与所述服务端F1的IP地址相邻的下一个服务端F2,作为用于接收订阅所述主题的消息的服务端并通知给所述客户端;所述客户端根据该通知将订阅所述主题的消息发送给所述服务端F1和所述服务端F2;
当消息中间件的客户端发布一个主题的消息时,请求任意一个中间件的服务端确定用于发布所述主题的消息的服务端,接收到所述请求的服务端根据所要发布的主题的内容,按照所述哈希算法计算出相应的哈希值,将该哈希值所在的所述哈希区间对应的服务端F3作为用于发布所述主题的消息的服务端,并通知给所述客户端;所述客户端根据该通知将需要发布的所述主题的消息发送给所述服务端F3。
3.根据权利要求1所述的方法,其特征在于,所述请求任意一个中间件的服务端包括:
所述客户端通过域名或者vip的方式访问所有的消息中间件的服务端。
4.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
客户端在每个预设的检查周期,检查当前用于订阅主题和发布主题消息的每个服务端是否可用,如果检查到所述检查周期内一个服务端不可用的次数达到预设的门限值W,则重新请求确定相应的用于发布主题消息或订阅主题的服务端。
5.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
客户端在每个预设的检查周期,对于当前所订阅和发布消息的每个主题,重新请求用于相应的主题订阅或主题消息发布的服务端,并且将所请求的服务端与本地当前保存的相应服务端进行比较,如果不同,则将本地保存的用于相应的主题订阅或主题消息发布的服务端设置为所请求的服务端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410098109.3A CN103841206B (zh) | 2014-03-17 | 2014-03-17 | 一种订阅和发布主题消息的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410098109.3A CN103841206B (zh) | 2014-03-17 | 2014-03-17 | 一种订阅和发布主题消息的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103841206A true CN103841206A (zh) | 2014-06-04 |
CN103841206B CN103841206B (zh) | 2017-04-05 |
Family
ID=50804329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410098109.3A Active CN103841206B (zh) | 2014-03-17 | 2014-03-17 | 一种订阅和发布主题消息的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103841206B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104243611A (zh) * | 2014-09-30 | 2014-12-24 | 浪潮软件股份有限公司 | 一种基于分发思想的消息服务中间件系统 |
CN106293968A (zh) * | 2016-08-04 | 2017-01-04 | 华中科技大学 | 一种基于Kafka消息中间件的双向通信系统及方法 |
CN106657394A (zh) * | 2017-02-10 | 2017-05-10 | 山东浪潮商用系统有限公司 | 一种基于物联网大数据的设备信息采集系统及方法 |
CN107566251A (zh) * | 2017-08-29 | 2018-01-09 | 阔地教育科技有限公司 | 消息传输方法、存储设备及服务器 |
CN107592215A (zh) * | 2017-08-31 | 2018-01-16 | 郑州云海信息技术有限公司 | 一种管理消息中间件的方法 |
CN108076098A (zh) * | 2016-11-16 | 2018-05-25 | 北京京东尚科信息技术有限公司 | 一种业务处理方法及系统 |
CN108282500A (zh) * | 2017-01-05 | 2018-07-13 | 阿里巴巴集团控股有限公司 | 消息发布方法、装置以及电子设备 |
CN110875935A (zh) * | 2018-08-30 | 2020-03-10 | 阿里巴巴集团控股有限公司 | 消息发布、处理、订阅方法、装置及系统 |
CN111741041A (zh) * | 2019-07-10 | 2020-10-02 | 北京京东尚科信息技术有限公司 | 消息处理方法及其装置、电子设备及计算机可读介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1794708A (zh) * | 2005-07-29 | 2006-06-28 | 华为技术有限公司 | 呈现业务系统及发布呈现信息的方法 |
CN1908970A (zh) * | 2005-08-03 | 2007-02-07 | 北京航空航天大学 | 分布式的信息发布/订阅系统 |
CN102819569A (zh) * | 2012-07-18 | 2012-12-12 | 中国科学院软件研究所 | 一种分布交互式仿真系统中的数据匹配方法 |
-
2014
- 2014-03-17 CN CN201410098109.3A patent/CN103841206B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1794708A (zh) * | 2005-07-29 | 2006-06-28 | 华为技术有限公司 | 呈现业务系统及发布呈现信息的方法 |
CN1908970A (zh) * | 2005-08-03 | 2007-02-07 | 北京航空航天大学 | 分布式的信息发布/订阅系统 |
CN102819569A (zh) * | 2012-07-18 | 2012-12-12 | 中国科学院软件研究所 | 一种分布交互式仿真系统中的数据匹配方法 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104243611A (zh) * | 2014-09-30 | 2014-12-24 | 浪潮软件股份有限公司 | 一种基于分发思想的消息服务中间件系统 |
CN104243611B (zh) * | 2014-09-30 | 2017-07-07 | 浪潮软件股份有限公司 | 一种基于分发思想的消息服务中间件系统 |
CN106293968A (zh) * | 2016-08-04 | 2017-01-04 | 华中科技大学 | 一种基于Kafka消息中间件的双向通信系统及方法 |
CN106293968B (zh) * | 2016-08-04 | 2019-05-10 | 华中科技大学 | 一种基于Kafka消息中间件的双向通信系统及方法 |
CN108076098A (zh) * | 2016-11-16 | 2018-05-25 | 北京京东尚科信息技术有限公司 | 一种业务处理方法及系统 |
CN108076098B (zh) * | 2016-11-16 | 2021-01-26 | 北京京东尚科信息技术有限公司 | 一种业务处理方法及系统 |
CN108282500A (zh) * | 2017-01-05 | 2018-07-13 | 阿里巴巴集团控股有限公司 | 消息发布方法、装置以及电子设备 |
CN106657394A (zh) * | 2017-02-10 | 2017-05-10 | 山东浪潮商用系统有限公司 | 一种基于物联网大数据的设备信息采集系统及方法 |
CN106657394B (zh) * | 2017-02-10 | 2020-06-05 | 浪潮软件科技有限公司 | 一种基于物联网大数据的设备信息采集系统及方法 |
CN107566251A (zh) * | 2017-08-29 | 2018-01-09 | 阔地教育科技有限公司 | 消息传输方法、存储设备及服务器 |
CN107592215A (zh) * | 2017-08-31 | 2018-01-16 | 郑州云海信息技术有限公司 | 一种管理消息中间件的方法 |
CN110875935A (zh) * | 2018-08-30 | 2020-03-10 | 阿里巴巴集团控股有限公司 | 消息发布、处理、订阅方法、装置及系统 |
CN111741041A (zh) * | 2019-07-10 | 2020-10-02 | 北京京东尚科信息技术有限公司 | 消息处理方法及其装置、电子设备及计算机可读介质 |
CN111741041B (zh) * | 2019-07-10 | 2023-05-12 | 北京京东尚科信息技术有限公司 | 消息处理方法及其装置、电子设备及计算机可读介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103841206B (zh) | 2017-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103841206A (zh) | 一种订阅和发布主题消息的方法 | |
CN102447624B (zh) | 在服务器集群上实现负载均衡的方法、节点服务器及集群 | |
CN103369051B (zh) | 一种数据服务器集群系统及数据同步方法 | |
CN101969468B (zh) | 查询服务器集群系统及查询方法 | |
Banno et al. | Designing overlay networks for handling exhaust data in a distributed topic-based pub/sub architecture | |
CN102523234A (zh) | 一种应用服务器集群实现方法及系统 | |
CN105025053A (zh) | 基于云存储技术的分布式文件的上传方法及其系统 | |
CN101729412A (zh) | 地理信息服务的分布式层次集群方法和系统 | |
CN104284201A (zh) | 一种视频内容的处理方法和装置 | |
CN105827687A (zh) | 集群管理方法及其管理系统 | |
WO2010127618A1 (zh) | 一种实现流媒体内容服务的系统和方法 | |
CN103916231A (zh) | 云计算平台及其服务器时间同步方法 | |
CN104539982A (zh) | 一种视频点对点资源共享调度方法、系统及节点终端 | |
CN104202386A (zh) | 一种高并发量分布式文件系统及其二次负载均衡方法 | |
JP2006221423A (ja) | データ配布方法、装置、及び記憶媒体 | |
CN102891797A (zh) | 支持消息持久化的发布订阅方法 | |
CN106790354B (zh) | 一种防数据拥堵的通信方法及其装置 | |
KR20130016594A (ko) | 컨텐츠 중심 네트워크에서 컨텐츠 전송 장치의 순차적 컨텐츠 전송 방법, 컨텐츠 수신 장치의 순차적 컨텐츠 수신 방법, 컨텐츠 전송 장치 및 컨텐츠 수신 장치 | |
CN205899536U (zh) | 一种基于瓦片地图的地理信息服务系统 | |
CN109088954B (zh) | 一种分布式物体标识信息注册与解析的方法 | |
CN105141687A (zh) | 一种生产消息的方法 | |
CN101605094A (zh) | 基于点对点网络的环模型及其路由算法 | |
CN103577424A (zh) | 分布式数据库视图的实现方法及系统 | |
CN103731506B (zh) | 一种内容注入方法、第一业务服务节点和内容分发网络 | |
CN108093147B (zh) | 一种分布式多级调度方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20191129 Address after: 100176 room 222, 2f, building C, No. 18, Kechuang 11th Street, Beijing Economic and Technological Development Zone, Daxing District, Beijing Patentee after: Beijing Jingdong three hundred and sixty degree e-commerce Co., Ltd. Address before: 100080, Beijing, Suzhou Street, No. 20, building 2, No. 2, Haidian District Patentee before: Beijing Jingdong Shangke Information Technology Co., Ltd. |
|
TR01 | Transfer of patent right |