CN110262905A - 基于高性能可伸缩的优先级队列的消息中间件的推送方法 - Google Patents
基于高性能可伸缩的优先级队列的消息中间件的推送方法 Download PDFInfo
- Publication number
- CN110262905A CN110262905A CN201910469486.6A CN201910469486A CN110262905A CN 110262905 A CN110262905 A CN 110262905A CN 201910469486 A CN201910469486 A CN 201910469486A CN 110262905 A CN110262905 A CN 110262905A
- Authority
- CN
- China
- Prior art keywords
- message
- priority
- bitmap
- queue
- oriented middleware
- 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.)
- Pending
Links
Classifications
-
- 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
Abstract
本发明公开了基于高性能可伸缩的优先级队列的消息中间件的推送方法,属于物联网消息及时推送技术领域。步骤一:设计优先级范围(priority(0)—priority(k)),每个优先级对应于一个消息队列,即是priority(n)←→list(n);步骤二:设计一个位图(bitmap),位图中的每一位对应于一个优先级的消息队列;步骤三:当消息加入到队列时,先提取出消息的优先级;通过优先级定位到优先级对应的消息队列,然后将消息加入到消息队列的尾部;步骤四:消息中间件系统进行消息推送时,按照优先级的高低顺序扫描位图,进行推送。本发明通过对消息进行优先级排序,确保优先级高的消息及时推送给用户,以实现更好的用户体验。
Description
技术领域
本发明涉及物联网消息及时推送技术领域,更具体的说是涉及一种基于高性能可伸缩的优先级队列的消息中间件的推送方法。
背景技术
消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。
对于消息中间件来说,支持消息的优先级排列至关重要。对于用户关心度高的消息,对实时性消息的要求极高。如何从数量众多的消息中,快速选择高优先级的消息进行推送是本领域技术人员考虑的问题。
发明内容
本发明的目的在于提供一种基于高性能可伸缩的优先级队列的消息中间件的推送方法,通过对消息进行优先级排序,确保优先级高的消息及时推送给用户,以实现更好的用户体验。
为了实现上述目的,本发明采用以下技术方案:
基于高性能可伸缩的优先级队列的消息中间件的推送方法,包括以下步骤:
步骤一:设计优先级范围(priority(0)—priority(k)),每个优先级对应于一个消息队列,即是priority(n)←→list(n);
步骤二:设计一个位图(bitmap),位图中的每一位对应于一个优先级的消息队列;
步骤三:当消息加入到队列时,先提取出消息的优先级;通过优先级定位到优先级对应的消息队列,然后将消息加入到消息队列的尾部;
步骤四:消息中间件系统进行消息推送时,按照优先级的高低顺序扫描位图,进行推送。
进一步的,所述步骤二中,如果优先级对应的位图标志位为0时,将优先级在位图中的标志位设置为1,标识该优先级对应的消息队列不为空。
进一步的,所述步骤二中,当优先级消息队列不为空时,与之对应的位图中对应的标志位设置为1;当优先级消息队列为空时,与之对应的位图中对应的标志位设置为0。
进一步的,所述步骤四中,找出设置为1的标志位,然后取出对应优先级队列中的第一条消息进行推送。
进一步的,所述步骤四中,消息推送后,判断优先级消息列表是否为空,如果优先级消息列表为空,则将位图中对应的标志位设置为0。
本发明与现有技术相比具有的有益效果是:
本发明提供一种基于高性能可伸缩的优先级队列的消息中间件的推送方法,通过对消息进行优先级排序,确保优先级高的消息及时推送给用户,以实现更好的用户体验。消息队列采用双向链表实现,以便消息(message)的快速添加与移除操作。当优先级消息队列为空时,与之对应的位图中对应的标志位设置为0;这样可以避免全局扫描,提高消息系统的整体性能。
附图说明
图1是本发明的基于高性能可伸缩的优先级队列的消息中间件的推送方法的流程图。
具体实施方式
下面结合实施例对本发明作进一步的描述,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域的普通技术人员在没有做出创造性劳动前提下所获得的其他所用实施例,都属于本发明的保护范围。
实施例1
如图1所示,基于高性能可伸缩的优先级队列的消息中间件的推送方法,所述的方法包括以下步骤:
步骤一:设计优先级范围(priority(0)—priority(k)),每个优先级对应于一个消息队列,即是priority(n)←→list(n)。消息队列采用双向链表实现,以便消息(message)的快速添加与移除操作。
步骤二:设计一个位图(bitmap),位图中的每一位对应于一个优先级的消息队列;如果优先级对应的位图标志位为0时,将优先级在位图中的标志位设置为1,标识该优先级对应的消息队列不为空。当优先级消息队列不为空(即至少存在一条消息时),与之对应的位图中对应的标志位设置为1;当优先级消息队列为空时,与之对应的位图中对应的标志位设置为0;这样可以避免全局扫描,提高消息系统的整体性能;
步骤三:当消息加入到队列时,先提取出消息的优先级;通过优先级定位到优先级对应的消息队列,然后将消息加入到消息队列的尾部;
步骤四:消息中间件系统进行消息推送时,按照优先级的高低顺序扫描位图,找出设置为1的标志位,然后取出对应优先级队列中的第一条消息进行推送;消息推送后,判断优先级消息列表是否为空,如果为空的话将位图中对应的标志位设置为0;这样可以实现消息中间件的01消息推送。
本发明还提供了实现上述消息中间件的01消息推送的服务器节点的存活检查设计、消息订阅及同步设计、消息发布及转发设计、网络异常处理设计和慢消费客户端检查与处理设计:
存活检查设计:首先服务器节点要能够保证对外提供服务的节点都是正常的(说简单一点就是存活的),所以服务器通过zk集群来保证。所有服务器节点在启动的时候都必须注册在zookeeper集群上注册一个临时节点,这个临时节点就是来保证服务器节点的存活的。如果某一个服务器节点由于某种原因(程序bug、网络断掉、服务器宕机等)挂掉了,那么zookeeper会自动把这个临时节点删掉,那么其他服务器或者客户端就会看不到这个节点的地址了,保证了对外公布的服务器节点都是存活可用的。
消息订阅及同步设计:任何需要收到指定主题消息的客户端都必须先和服务器集群建立长连接并且订阅消息,如果是单服务器节点那么很容易实现,只需要简单在服务器节点内存中保存一个订阅队列即可。但是在分布式的消息中间件中,由于服务器节点是多台,所以任何一个客户端的订阅信息都需要在每一个服务器节点上保持同步。所以增加了分布式的特性需要处理的内容和复杂度大大增加了,这也是分布式系统最大的难点(需要考虑每一个节点此时此刻的运行状态,然后根据这些状态做合适的处理)。消息订阅的同步绝对是需要强一致性的,所以如果一个客户端的订阅消息在同步到任何一个服务器节点失败那么此次消息订阅就是失败的。虽然所有服务器节点之间基本上都是通过内网进行通信的,但是网络异常依然不可避免,所以必须需要考虑。还有如果某一个服务器节点挂掉,那么其他服务器节点需要及时的知道,因为挂掉的节点不应该在消息订阅同步的范围内。
消息发布及转发设计:消息都已经成功的订阅了,那么就应该有消息进行发布了。消息发布功能其实比较简单,就是根据订阅列表里面的主题进行消息主题的匹配进行消息进行转发即可。这里唯一需要控制的就是需要根据消息发布者来进行区别进行转发,如果是客户端发布的消息,那么需要把这些消息同样发布给其他订阅此消息主题的服务器节点,如果是服务器二次转发的消息就不需要进行转发到其他服务器节点了,不然也会形成消息的死循环。分组订阅的消息发送需要有一点点的不同,他会从所有订阅次分组订阅信息的节点中随机选择一个进行转发,而不是像普通消息订阅进行所有的订阅转发。
网络异常处理设计:所有分布式系统都不可避免的需要考虑网络异常的情况,针对服务器节点的网络异常处理设计需要考虑两点,一点是和zookeeper保持的心跳长连接情况;二是服务器节点之间相互建立的长连接(主要用于消息订阅同步和消息转发)。针对第一种情况,需要专门的一个线程来定期检查和zookeeper的连接情况,如果发现连接已经断开那么重新进行注册即可;第二种情况也需要定期检查,不过要复杂一点,就是每一个节点都需要考虑此时与自己保持连接的服务器节点是否和zookeeper上的一致,如果不一致需要处理成一致(以zookeeper上注册信息为准)。
慢消费客户端检查与处理设计:为了保证服务器节点转发消息的及时性,需要保证客户端接收和处理消息的速度,因为一个公共的消息主题,可能被成千上万个客户端订阅,如果由于某一个客户端处理很慢,导致其他客户端也不能及时接收消息,服务器节点不能及时转发消息,那么就很得不偿失了。所以需要有机制检查出那些消费很慢的客户端,然后直接清除掉,通常的手段就是进行超时设置,如果发现哪一个客户端接收消息超时,那么就直接把这个客户端的连接关闭掉。从而保证以后的消息转发都是很畅通无阻的。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.基于高性能可伸缩的优先级队列的消息中间件的推送方法,其特征在于:包括以下步骤:
步骤一:设计优先级范围(priority(0)—priority(k)),每个优先级对应于一个消息队列,即是priority(n)←→list(n);
步骤二:设计一个位图(bitmap),位图中的每一位对应于一个优先级的消息队列;
步骤三:当消息加入到队列时,先提取出消息的优先级;通过优先级定位到优先级对应的消息队列,然后将消息加入到消息队列的尾部;
步骤四:消息中间件系统进行消息推送时,按照优先级的高低顺序扫描位图,进行推送。
2.根据权利要求1所述的基于高性能可伸缩的优先级队列的消息中间件的推送方法,其特征在于:所述步骤二中,如果优先级对应的位图标志位为0时,将优先级在位图中的标志位设置为1,标识该优先级对应的消息队列不为空。
3.根据权利要求2所述的基于高性能可伸缩的优先级队列的消息中间件的推送方法,其特征在于:所述步骤二中,当优先级消息队列不为空时,与之对应的位图中对应的标志位设置为1;当优先级消息队列为空时,与之对应的位图中对应的标志位设置为0。
4.根据权利要求3所述的基于高性能可伸缩的优先级队列的消息中间件的推送方法,其特征在于:所述步骤四中,找出设置为1的标志位,然后取出对应优先级队列中的第一条消息进行推送。
5.根据权利要求4所述的基于高性能可伸缩的优先级队列的消息中间件的推送方法,其特征在于:所述步骤四中,消息推送后,判断优先级消息列表是否为空,如果优先级消息列表为空,则将位图中对应的标志位设置为0。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910469486.6A CN110262905A (zh) | 2019-05-31 | 2019-05-31 | 基于高性能可伸缩的优先级队列的消息中间件的推送方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910469486.6A CN110262905A (zh) | 2019-05-31 | 2019-05-31 | 基于高性能可伸缩的优先级队列的消息中间件的推送方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110262905A true CN110262905A (zh) | 2019-09-20 |
Family
ID=67916463
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910469486.6A Pending CN110262905A (zh) | 2019-05-31 | 2019-05-31 | 基于高性能可伸缩的优先级队列的消息中间件的推送方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110262905A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110971693A (zh) * | 2019-12-03 | 2020-04-07 | 迈普通信技术股份有限公司 | 一种事件发布方法及装置 |
CN111552575A (zh) * | 2019-12-31 | 2020-08-18 | 远景智能国际私人投资有限公司 | 基于消息队列的消息消费方法、装置及设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070171914A1 (en) * | 2001-07-23 | 2007-07-26 | Broadcom Corporation | Flow based congestion control |
CN101996099A (zh) * | 2010-11-17 | 2011-03-30 | 山东中创软件工程股份有限公司 | 一种消息处理方法及系统 |
CN103412790A (zh) * | 2013-08-07 | 2013-11-27 | 南京师范大学 | 移动安全中间件的多核并发调度方法与系统 |
CN103440171A (zh) * | 2013-08-25 | 2013-12-11 | 浙江大学 | 一种构件化硬件实时操作系统的实现方法 |
CN103502943A (zh) * | 2011-12-31 | 2014-01-08 | 华为技术有限公司 | 一种基于消息队列的分布式任务处理的方法、装置及系统 |
CN105868033A (zh) * | 2016-04-06 | 2016-08-17 | 江苏物联网研究发展中心 | 基于Redis实现优先级消息队列的方法及系统 |
-
2019
- 2019-05-31 CN CN201910469486.6A patent/CN110262905A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070171914A1 (en) * | 2001-07-23 | 2007-07-26 | Broadcom Corporation | Flow based congestion control |
CN101996099A (zh) * | 2010-11-17 | 2011-03-30 | 山东中创软件工程股份有限公司 | 一种消息处理方法及系统 |
CN103502943A (zh) * | 2011-12-31 | 2014-01-08 | 华为技术有限公司 | 一种基于消息队列的分布式任务处理的方法、装置及系统 |
CN103412790A (zh) * | 2013-08-07 | 2013-11-27 | 南京师范大学 | 移动安全中间件的多核并发调度方法与系统 |
CN103440171A (zh) * | 2013-08-25 | 2013-12-11 | 浙江大学 | 一种构件化硬件实时操作系统的实现方法 |
CN105868033A (zh) * | 2016-04-06 | 2016-08-17 | 江苏物联网研究发展中心 | 基于Redis实现优先级消息队列的方法及系统 |
Non-Patent Citations (4)
Title |
---|
DRSDRS: "RabbitMQ的优先级队列", 《HTTPS://BLOG.CSDN.NET/DRSDRS/ARTICLE/DETAILS/80955715》 * |
孙冬雪: "一种短信营销服务系统的设计", 《信息技术与标准化》 * |
朱小厮: "RabbitMQ之队列优先级", 《HTTPS://BLOG.CSDN.NET/U013256816/ARTICLE/DETAILS/55105495》 * |
杨静等: "一种基于Unix 的实时化方案的设计", 《长春理工大学学报(自然科学版)》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110971693A (zh) * | 2019-12-03 | 2020-04-07 | 迈普通信技术股份有限公司 | 一种事件发布方法及装置 |
CN110971693B (zh) * | 2019-12-03 | 2023-09-15 | 迈普通信技术股份有限公司 | 一种事件发布方法及装置 |
CN111552575A (zh) * | 2019-12-31 | 2020-08-18 | 远景智能国际私人投资有限公司 | 基于消息队列的消息消费方法、装置及设备 |
CN111552575B (zh) * | 2019-12-31 | 2023-09-12 | 远景智能国际私人投资有限公司 | 基于消息队列的消息消费方法、装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8065680B2 (en) | Data gateway for jobs management based on a persistent job table and a server table | |
JP5898980B2 (ja) | ネットワーク環境において非持続性のメッセージの複数のキューを管理する方法、システム及び記憶媒体 | |
CN108667719B (zh) | 一种实时消息传递方法及系统 | |
CN108769099B (zh) | 一种消息中间件的消息去重的实现方法 | |
CN105959349B (zh) | 一种分布式服务端运行系统及方法 | |
US9881071B2 (en) | Transport layer abstraction for clustering implementation | |
JPH10500272A (ja) | データ通信 | |
CN103581307A (zh) | 一种基于集群的发布/订阅系统及其可靠性保障方法 | |
CN102065136B (zh) | 一种p2p网络安全数据传输方法及其系统 | |
CN102769544B (zh) | 通信系统中设备业务适配层架构及业务适配层实现方法 | |
CN110262905A (zh) | 基于高性能可伸缩的优先级队列的消息中间件的推送方法 | |
CN112738184A (zh) | 一种插件式动态注册分布式微服务网关系统 | |
CN108631955A (zh) | 一种确保消息发送可达的方法、系统和装置 | |
WO2013126430A1 (en) | Systems and methods involving virtual machine host isolation over a network | |
Salehi et al. | Highly-available content-based publish/subscribe via gossiping | |
CN112527523A (zh) | 面向高性能计算多云的分布式消息传递方法及系统 | |
CN111526188B (zh) | 基于Spark Streaming结合Kafka确保数据零丢失的系统和方法 | |
CN103095549A (zh) | 一种即时通信工具间消息传递的方法和系统 | |
CN112583895B (zh) | Tcp通信方法、系统及装置 | |
CN112527530B (zh) | 消息处理方法、装置、设备、存储介质及计算机程序产品 | |
CN1941927B (zh) | 向电信网络节点的数据分发 | |
CN106792825B (zh) | 一种分布式网络设备的管理方法 | |
EP1952318A1 (en) | Independent message stores and message transport agents | |
CN115052006B (zh) | 一种基于领导节点的数据同步方法及系统 | |
US8135025B2 (en) | Asynchronous communication in an unstable network |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190920 |