[发明专利]消息句柄的创建方法、消息推送方法及相关装置和系统在审
| 申请号: | 202210331159.6 | 申请日: | 2022-03-30 |
| 公开(公告)号: | CN114979249A | 公开(公告)日: | 2022-08-30 |
| 发明(设计)人: | 赵福建;张美平 | 申请(专利权)人: | 阿里巴巴(中国)有限公司 |
| 主分类号: | H04L67/55 | 分类号: | H04L67/55;H04L67/568;H04L67/146;H04L69/22;H04L69/28 |
| 代理公司: | 北京思格颂知识产权代理有限公司 11635 | 代理人: | 潘珺 |
| 地址: | 310027 浙江省杭州市滨江*** | 国省代码: | 浙江;33 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 消息 句柄 创建 方法 推送 相关 装置 系统 | ||
本发明公开了一种消息句柄的创建方法、消息推送方法和相关装置和系统。所述消息句柄的创建方法包括:响应于接收到的消费者客户端发送的对队列的订阅请求,从预先保存的所述订阅请求对应的队列中读取消息;为读取的所述消息创建消息句柄和对应的定时任务,所述定时任务用于在所述消息对应的预设的消息重试间隔到达时,触发服务端删除所述消息对应的消息句柄,以使得服务端能够重新推送所述消息。本发明可避免服务端被大量的消息句柄占满内存而瘫痪,也可避免消息长时间未被消费或者延迟消费对相关应用带来的不良影响。
技术领域
本发明涉及消息中间件技术领域,特别涉及一种消息句柄的创建方法、消息推送方法和相关装置和系统。
背景技术
在AMQP(一种面向消息中间件设计的应用层协议,是一个标准的开放协议)消息模型下,消费者客户端订阅某些队列(Queue)的消息,服务端会将这些queue中的消息推送给消费者客户端。当订阅Queue时设置的消息确认机制为手动确认,在这种机制下,服务端在没有收到消费者客户端的确认报文之前,不会认为用户已经成功消费该条消息。
开源RabbitMQ是用Erlang语言实现了高级消息队列协议(AMQP)的开源消息代理软件,在开源RabbitMQ的实现中,消费者客户端与服务端建立的连接(Connection)没有与服务端断开之前,且服务端没有收到消费者客户端的确认,消息不会重投给用户,这就给了用户足够的时间去消费一条消息,但与此同时也带来了一些问题:
对于服务端而言,当大量的消息都处于待消费者客户端确认的状态,开源RabbitMQ的服务端内存会一直存储这些消息的句柄,从而在积累一定量的情况下,服务端因内存爆满不断垃圾回收(GC)而瘫痪。
另外,如果消费者客户端因为某些问题出现异常而无法关闭Connection,或是无法通过心跳方式而由服务端关闭Connection,则待消费者确认的消息将一直处于“未被消费”的状态,而对于大多数应用而言,其产生的消息需要被及时消费,如果消息的长时间不被消费或者被延迟消费,对这些应用来说是无法忍受的。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种消息句柄的创建方法、消息推送方法和相关装置和系统。
第一方面,本发明实施例提供一种消息句柄的创建方法,包括:
响应于接收到的消费者客户端发送的对队列的订阅请求,从预先保存的所述订阅请求对应的队列中读取消息;
为读取的所述消息创建消息句柄和对应的定时任务,所述定时任务用于在所述消息对应的预设的消息重试间隔到达时,触发服务端删除所述消息对应的消息句柄,以使得服务端能够重新推送所述消息。
在一个实施例中,从预先保存的所述订阅请求对应的队列中读取消息之后,还包括:
为读取的所述消息创建唯一的消息标识,所述消息标识包括:连接标识、通道标识和传送标签。
在一个实施例中,为读取的所述消息创建消息句柄,包括:
创建消息句柄的数据内容,并将消息句柄的数据内容存储于预设的堆外区域;
将所述消息句柄的数据内容在所述堆外区域的存储地址作为所述消息句柄的索引;
将所述消息标识和所述消息句柄的索引,存储于预设的堆内区域。
在一个实施例中,所述创建消息句柄的数据内容,包括:
创建下述任一项或多项数据:
所述消息持久化存储所在队列的队列标识;
所述消息所在的定时任务的标识;
所述消息在持久化存储所在队列中的逻辑位移信息;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴(中国)有限公司,未经阿里巴巴(中国)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210331159.6/2.html,转载请声明来源钻瓜专利网。





