[发明专利]消息中间件消息获取方法、装置和系统有效
申请号: | 201710658525.8 | 申请日: | 2017-08-04 |
公开(公告)号: | CN109391646B | 公开(公告)日: | 2021-08-17 |
发明(设计)人: | 林棋;夏勇;郑东建;肖庆云;段江南;黄景平;曾康;彭亮 | 申请(专利权)人: | 中国电信股份有限公司 |
主分类号: | H04L29/08 | 分类号: | H04L29/08 |
代理公司: | 中国贸促会专利商标事务所有限公司 11038 | 代理人: | 王云飞 |
地址: | 100033 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 消息 中间件 获取 方法 装置 系统 | ||
本发明公开一种消息中间件消息获取方法、装置和系统。该方法包括:接收消息处理端发送的消息拉取请求,其中消息拉取请求中包括目标消息位置;获取消息队列的处理进度,其中所述处理进度为当前操作之前消息队列的游标位置,处理进度之后的消息从未被获取过;比较目标消息位置和处理进度;若目标消息位置处于处理进度之后,则生成目标消息的消息处理状态信息,并将所述消息处理状态存储在消息处理状态缓存中;将目标消息推送给消息处理端。本发明通过在处理阶段完成时更新消息的状态,查询消息处理状态缓存中的消息处理状态,将处理状态符合的消息推送给对应消息处理端,避免了消息处理端进行不必要的消息获取。
技术领域
本发明涉及数据处理技术领域,特别涉及一种消息中间件消息获取方法、装置和系统。
背景技术
消息中间件是指支持与保障分布式应用程序之间收发消息数据的中间层,消息发送方和处理方之间的连接完全是松耦合的,通信是非阻塞的。常见的产品有RabbitMQ(MQ的全称为Message Queue,消息队列)、RocketMQ等。
消息中间件的基本工作原理为:消息数据存储于服务端的消息队列中,消息处理端从消息队列中拉取消息进行处理。
图1为现有消息中间件消息获取方法的示意图。如图1所示,为现有消息中间件消息获取方法中:
1、消息处理端批量从服务端拉取消息,服务端存储消息队列的处理进度。
2、消息的处理结果和状态都存储于各个消息处理端中。
3、倘若在消息处理未完成时消息处理端出现异常错误或者由于业务需要重试处理消息时,向服务端的批量拉取很可能获取到已经处理完成的消息,导致重复处理。
4、中间件配套的管理查询系统中很难高效地获取消息实时的处理状态。
现有的消息中间件为了保证消息处理的性能,通常通过批量方式从消息队列中顺序获取消息,然后把消息的处理状态存储在处理端。但是当该批消息中有个别消息处理失败或者由于业务需要重试处理时,处理端的批量操作也会对目标消息在消息队列中邻近的已处理完成的消息进行不必要的重复获取。
发明内容
鉴于以上技术问题,本发明提供了一种消息中间件消息获取方法、装置和系统,在处理阶段完成时更新消息的状态,避免了消息处理端进行不必要的消息获取。
根据本发明的一个方面,提供一种消息中间件消息获取方法,包括:
接收消息处理端发送的消息拉取请求,其中,所述消息拉取请求中包括目标消息位置;
获取消息队列的处理进度,其中,所述处理进度为当前操作之前消息队列的游标位置,处理进度之后的消息从未被获取过;
比较目标消息位置和处理进度;
若目标消息位置处于处理进度之后,则生成目标消息的消息处理状态信息,并将所述消息处理状态信息存储在消息处理状态缓存中;
将目标消息推送给消息处理端。
在本发明的一个实施例中,所述方法还包括:
在目标消息推送成功的情况下,将目标消息的消息处理状态信息修改为已拉取,并将目标消息的消息处理状态更新到消息处理状态信息缓存;
和/或,
在消息处理端处理成功、返回处理结果的情况下,将消息处理状态缓存中目标消息的消息处理状态信息删除。
在本发明的一个实施例中,所述目标消息位置处于签收进度之后,其中,消息队列的签收进度之后的消息为消息队列中尚未收到消息处理端返回处理成功结果的消息。
在本发明的一个实施例中,所述方法还包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国电信股份有限公司,未经中国电信股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710658525.8/2.html,转载请声明来源钻瓜专利网。