一种消息队列桥接增强的方法与流程

文档序号:25663455发布日期:2021-06-29 23:38阅读:223来源:国知局
一种消息队列桥接增强的方法与流程

1.本发明涉及计算机技术领域,特别涉及一种消息队列桥接增强的方法。


背景技术:

2.在物联网中,当我们给设备发送消息,消息首先会经过消息队列(如:rabbitmq),通过桥接,将消息转发至另一个消息队列(如:emq),进而投递给设备(如图1所示)。在现有的物联网环境下,由于延迟发送、网络环境差、设备断网、设备本身消费消息慢、消息队列的特性等原因,会存在消息堆积的情况,而随着时间的推移,将出现:1、优先级高的设备可能是最后才收到消息;2、产生大量无用的信息;3、信息丢失。这些都导致了消息传送的精准度不够。


技术实现要素:

3.为解决上述问题,本发明提供了一种消息队列桥接增强的方法,以提高消息传送的精准度。
4.本发明采用以下技术方案:
5.一种消息队列桥接增强的方法,包括如下步骤:
6.设备的排序:定义设备得分和优先级得分,并分别作为任务设备列表和优先级设备列表的排序依据;
7.消息的排序:定义消息得分,作为消息列表的排序依据;
8.消息的过滤:根据新消息对具有相同消息属性的堆积消息进行覆盖并更新;
9.消息的清理:根据删除指令清除消息队列中满足条件的消息;
10.消息的送达:接收来自设备的确认字符,确认消息送达。
11.进一步地,所述任务设备列表为云端存有待发送消息的设备列表,所述优先级设备列表是从所述任务设备列表同步得到,同步长度即为支持同时发送的设备的限制数。
12.进一步地,所述设备得分score的影响因子包括设备角色s1、待发送消息数s2、消息优先级总s3和和历史成功率suc,所述设备得分score的计算为:score=(s1+s2+s3)
×
suc。
13.进一步地,所述优先级得分即为设备从所述任务设备列表同步到所述优先级设备列表时的同步时间,若消息发送给设备且设备应答,则将优先级得分更新为应答时间。
14.进一步地,所述设备角色s1为固定值,所述设备角色s1的计算为:s1=(n1
÷
n2)
×
50%,其中,n1为当前设备的设备角色的分值,n2为设备角色的最大分值,50%为所述设备角色的权重。
15.进一步地,所述待发送消息数s2的计算为:s2=(m
÷
m)
×
15%,其中,m为当前设备堆积的消息数,m为所有堆积消息总数,15%为所述待发送消息数的权重。
16.进一步地,所述消息优先级总和s3的计算为:s3=(p
÷
p)
×
35%,其中,p为当前设备所有消息的优先级总和,p为所有堆积消息的优先级总和,35%为所述消息优先级总和的
权重。
17.进一步地,所述历史成功率suc的计算为:suc=f
÷
f,其中,f为成功次数,f为请求总数,且f>5。
18.进一步地,所述消息属性由设备地址、业务类型和业务id组成。
19.进一步地,所述消息的清理具体为:接收删除指令并立即缓存到分布式缓存中间件中,
20.对于已入库的消息,若满足删除条件则删除消息;
21.对于未入库的消息,若消息投递时间小于删除指令发送时间且满足删除条件,则消息废弃,否则消息入库;若消息投递时间大于删除指令发送时间,则将删除指令从分布式缓存中间件中移除,且消息入库;
22.所述删除条件即为消息的消息属性相同。
23.采用上述技术方案后,本发明与背景技术相比,具有如下优点:
24.1、本发明定义了设备得分与优先级得分及其计算方法,并分别作为任务设备列表和优先级设备列表的排序依据,实现设备的优先级排序,提高消息发送的精准度;
25.2、根据消息属性(设备地址、业务类型和业务id)确定消息的唯一,实现堆积消息的覆盖和更新,减少大量重复无用的消息;并利用删除指令动态地对进行消息的清理,避免平台数据残留,提高用户的体验的同时也减少了宽带浪费,更避免设备信息错误故障、状态不同步等一系列的问题;
26.3、通过接收设备的确认字符,以确定消息的成功消费,保证消息的送达。
附图说明
27.图1为现有技术的消息发送方案示意图;
28.图2为本发明的优先级设备列表同步的示意图;
29.图3为本发明消息过滤的原理示意图;
30.图4为本发明消息清理的原理示意图。
具体实施方式
31.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
32.实施例
33.本实施例采用的系统环境如下表1:
34.表1本实施例的系统运行环境
[0035][0036][0037]
一种消息队列桥接增强的方法,包括设备的排序、消息的过滤、消息的清理以及消息的送达。
[0038]
1、设备的排序:定义设备得分和优先级得分,并分别作为任务设备列表和优先级设备列表的排序依据;
[0039]
所述任务设备列表为云端存有待发送消息的设备列表,所述优先级设备列表是从所述任务设备列表同步得到,同步长度即为支持同时发送的设备的限制数。
[0040]
所述设备得分score的影响因子包括设备角色s1、待发送消息数s2、消息优先级总s3和和历史成功率suc,所述设备得分score的计算为:score=(s1+s2+s3)
×
suc。
[0041]
所述设备角色s1为固定值,这里的设备角色是设备在市场所担任的角色,所述设备角色s1的计算为:s1=(n1
÷
n2)
×
50%,其中,n1为当前设备的设备角色的分值,n2为设备角色的最大分值,50%为所述设备角色的权重。
[0042]
所述待发送消息数s2的计算为:s2=(m
÷
m)
×
15%,其中,m为当前设备堆积的消息数,m为所有堆积消息总数,15%为所述待发送消息数的权重。当前设备堆积的消息越多,得分就越高。
[0043]
所述消息优先级总和s3的计算为:s3=(p
÷
p)
×
35%,其中,p为当前设备所有消息的优先级总和,p为所有堆积消息的优先级总和,35%为所述消息优先级总和的权重。当前设备所有消息的优先级总和越高,得分越高。
[0044]
所述历史成功率suc的计算为:suc=f
÷
f,其中,f为成功次数,f为请求总数,且f>5。
[0045]
以上,所述设备得分是根据设备画像定义的,随着设备的继续运行,设备的画像会更加稳定和完整。
[0046]
所述优先级得分即为设备从所述任务设备列表同步到所述优先级设备列表时的同步时间,若消息发送给设备且设备应答,则将优先级得分更新为应答时间。
[0047]
如图2所示,本实施例同步时还以区间[now

timeout,now]作为滑动窗口,同步的长度即作为设备限制数,若当前设备数少于所述设备限制数,则动态从所述任务设备列表同步到所述优先级设备列表。这里的设备限制数是根据系统的性能得出的,是维护到配置
中心中,以此达到支持热部署,动态调整同时支持的设备数。当有消息发送给设备,设备应答上来,还会更新优先级设备列表的得分为应答时间。通过优先级设备列表进行对同时支持发送的设备数进行限制,达到分批发送的目的。
[0048]
2、消息的排序:定义消息得分,作为消息列表的排序依据;
[0049]
对于每个设备的消息列表内的消息,则根据业务重要性自定义等级,按照重要程度从高到低可分为1

12等级,1级表示最高级别,消息得分即消息对应的等级,如此,消息列表内的消息即可按等级从高到低降序排列。
[0050]
综上,本实施例通过计算设备得分和优先级得分,并分别作为任务设备列表和优先级设备列表的排序依据,还通过消息得分对消息列表内的消息进行排序,通过按分值进行降序排序,从而实现即使在堆积大量消息的情况下,也能做到对高优先级的设备,发送高优先级的消息。
[0051]
3、消息的过滤:根据新消息对具有相同消息属性的堆积消息进行覆盖并更新;所述消息属性由设备地址(dest)、业务类型(biztype)、和业务id(bizid)组成。
[0052]
在业务上,比如卡凭证下发的例子,我们关注的是最新的一条消息,若将旧数据也下发下去;比如,当请求没有应答,用户基于使用习惯会一直请求,导致更多消息堆积;这样不仅造成带宽上的浪费,还会给用户带来不好的体验。如图3所示,本实施例的桥接增强接收从rabbitmq投递的消息后,根据设备地址、业务类型和业务id对数据库中已存在的相同消息进行删除过滤,实现对数据库中具有相同消息属性的堆积消息进行覆盖和更新,然后新消息入库,后续根据排序顺序,当设备在线则发送消息。
[0053]
4、消息的清理:根据删除指令清除消息队列中满足条件的消息;
[0054]
目前市面上的消息队列框架,并不能满足根据删除指令,对消息队列中满足条件的消息进行删除,由于没有去重策略,会产生大量的重复无用的消息。比如设备解绑,则云端需要将这台设备的消息进行清除,避免平台数据残留。本实施例的桥接增强根据设备地址、业务类型和业务id三个消息属性来确定消息的唯一属性,然后删除满足条件的消息。具体过程如下:
[0055]
如图4所示,删除指令提供者发送删除指令给桥接增强,删除指令中包含了消息属性(dest、biztype、bizid)和删除指令发送时间(sendtime),桥接增强接收删除指令并立即缓存到分布式缓存中间件redis中。当消息中间件rabbitmq向桥接增强投递消息时,桥接增强从redis中获取删除指令列表,并对数据库中(如mysql)满足条件的消息进行删除。考虑到高并发下,系统cpu、内存、io、宽带的瓶颈,会出现延迟从rabbitmq消费消息,所以对于已入库的消息,若满足删除条件则删除消息;对于未入库的消息,若消息投递时间小于删除指令发送时间(sendtime)且满足删除条件,则消息废弃,否则消息入库;若消息投递时间大于删除指令发送时间(sendtime),则说明该删除值已经无用,即删除指令无效,则将删除指令从分布式缓存中间件中移除,且消息入库。所述删除条件即为消息的消息属性相同。
[0056]
5、消息的送达:接收来自设备的确认字符,以确定消息的成功消费,确认消息送达。
[0057]
本实施例涉及的消息队列可以是市面上任意的消息队列框架,比如:activemq、rocketmq、kafka等,消息入库所使用的数据库,可以是市面上的关系型或非关系型的数据库的任意一种。
[0058]
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1