CN110262905A - 基于高性能可伸缩的优先级队列的消息中间件的推送方法 - Google Patents

基于高性能可伸缩的优先级队列的消息中间件的推送方法 Download PDF

Info

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
Application number
CN201910469486.6A
Other languages
English (en)
Inventor
尹正华
刘晓莉
曹艳
时欢欢
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Changhong Electric Co Ltd
Original Assignee
Sichuan Changhong Electric Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sichuan Changhong Electric Co Ltd filed Critical Sichuan Changhong Electric Co Ltd
Priority to CN201910469486.6A priority Critical patent/CN110262905A/zh
Publication of CN110262905A publication Critical patent/CN110262905A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/547Messaging 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。
CN201910469486.6A 2019-05-31 2019-05-31 基于高性能可伸缩的优先级队列的消息中间件的推送方法 Pending CN110262905A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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实现优先级消息队列的方法及系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
DRSDRS: "RabbitMQ的优先级队列", 《HTTPS://BLOG.CSDN.NET/DRSDRS/ARTICLE/DETAILS/80955715》 *
孙冬雪: "一种短信营销服务系统的设计", 《信息技术与标准化》 *
朱小厮: "RabbitMQ之队列优先级", 《HTTPS://BLOG.CSDN.NET/U013256816/ARTICLE/DETAILS/55105495》 *
杨静等: "一种基于Unix 的实时化方案的设计", 《长春理工大学学报(自然科学版)》 *

Cited By (4)

* Cited by examiner, † Cited by third party
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