[发明专利]消息处理方法及系统、消息目的端设备与分布式消息系统有效
| 申请号: | 201310687237.7 | 申请日: | 2013-12-13 |
| 公开(公告)号: | CN104092717A | 公开(公告)日: | 2014-10-08 |
| 发明(设计)人: | 董宇 | 申请(专利权)人: | 深圳市腾讯计算机系统有限公司 |
| 主分类号: | H04L29/08 | 分类号: | H04L29/08 |
| 代理公司: | 北京三高永信知识产权代理有限责任公司 11138 | 代理人: | 江崇玉 |
| 地址: | 518000 广东省深圳市南*** | 国省代码: | 广东;44 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 消息 处理 方法 系统 目的 设备 分布式 | ||
技术领域
本发明涉及信息处理技术领域,特别涉及一种消息处理方法及系统、消息目的端设备与分布式消息系统。
背景技术
在分布式消息系统的应用中,由消息源端设备(Producer)发布的消息经消息代理端设备(Broker)转发到消息目的端设备(Consumer),期间流转的消息都达到海量,由于本身也是分布式系统,复杂度较高,导致消息重复或者丢失发生的概率被放大。因此在分布式消息系统的应用中,消息去重以及防止消息丢失显得尤为重要。
为了提高消息传输的效率,分布式消息系统在消息传递过程中需要提供明确的消息分发保障级别,消息分发保障级别描述一条消息被Producer成功发布后,相应的消息Consumer成功接收到这条消息的次数:消息分发保障级别具体可以包括如下三种:第一种、At least once,同一条消息至少会成功接收到1次,但可能接收到多次;第二种、At most once,同一条消息最多会成功接收到1次,但可能接收到0次;第三种、Exactly once,同一条消息成功接收到1次且仅1次。
从分布式消息系统的应用角度来看,第三种保障级别最符合使用场景,但现有技术中系统正常情况下可以提供Exactly once,当系统出现异常时,为了提高消息传输的成功率,通常采用第一种保障级别At least once来进行消息传输。例如Producer与Broker之间消息分发保障级别达到At least once;即要保证Broker至少收到消息1次,Producer可能会尝试多次发送同1条消息,这种情况 下,Broker可能会收到重复消息。如果此时不执行任何去重操作,在一些对消息准确度要求高的场景下,消息重复意味着数据出错,是不可容忍的。因此需要Broker对接收到的Producer消息进行去重,同时保证消息存储不丢失。然后Broker与Consumer之间消息分发保障级别也要达到At least once,保证Consumer能够消费到消息。在Consumer端,Consumer消费消息的过程可以分为3个原子步骤:a)从Broker端取得待读取消息的位置并读取消息;b)以读取的消息作为输入进行业务计算,将计算结果作为输出保存到外部存储器;c)在Consumer中保存新的待读取消息位置,其中,步骤b)和c)可以互换顺序。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:现有技术中,通常采用Bloom Filter方案在Broker端对收到的消息进行去重操作,但Bloom Filter的缺陷在消息中间件这个场景下会被放大,显得异常突出。因为Bloom Filter存在较为严重的问题——误算率,误算率与元素数量成正比关系,而分布式消息中间件存储的消息量是TB数量级,误算率将会超过可接受范围,造成消息处理效率较低。或者,在Consumer端消费消息的过程中,步骤b)或c)的处理过程未成功结束前进程崩溃,计算结果与待读取消息的位置之间都会处于不一致状态,恢复处理时造成重复消费消息或消息丢失,导致消息处理效率较低。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种消息处理方法及系统、消息目的端设备与分布式消息系统。所述技术方案如下:
一方面,提供了一种消息处理方法,所述方法包括:
消息源端设备为待发送的消息组生成消息标识,每个消息组包括多条消息,所述消息标识用以唯一标识所述消息组;
所述消息源端设备向Broker发送所述消息标识和所述消息组;
所述Broker接收并存储所述消息源端设备发送的所述消息标识和所述消息 组;
当所述消息源端设备确定需要再次发送所述消息组时,从已生成的消息标识中获取所述消息组的消息标识;
所述消息源端设备向所述Broker发送所述消息标识和所述消息组;
当所述消息代理端设备根据已接收到的消息标识,确定再次接收到所述消息标识对应的消息组时,对本次接收到的所述消息组进行去重处理。
另一方面,还提供了一种消息处理方法,所述方法包括:
从外部存储器中获取当前待处理的消息的位置;
根据所述当前待处理的消息的位置,调用应用程序接口从Broker中获取所述当前待处理的消息;所述应用程序接口提供所述当前待处理的消息的位置;
根据所述当前待处理的消息进行业务计算,得到计算结果;并确定下一条待处理的消息的位置;
将所述计算结果和所述下一条待处理的消息的位置以同一事务存储在所述外部存储器中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于深圳市腾讯计算机系统有限公司,未经深圳市腾讯计算机系统有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310687237.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:作业车辆
- 下一篇:一种池塘栽植豆瓣菜高产养殖草鱼的方法





