[发明专利]一种基于RabbitMQ的消息推送方法在审
| 申请号: | 202010247669.6 | 申请日: | 2020-04-01 |
| 公开(公告)号: | CN111427711A | 公开(公告)日: | 2020-07-17 |
| 发明(设计)人: | 刘瑞;魏金雷;杨继伟;徐士强;张咏雪 | 申请(专利权)人: | 山东汇贸电子口岸有限公司 |
| 主分类号: | G06F9/54 | 分类号: | G06F9/54 |
| 代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 郗艳荣 |
| 地址: | 250100 山东省济南市*** | 国省代码: | 山东;37 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 rabbitmq 消息 推送 方法 | ||
本发明特别涉及一种基于RabbitMQ的消息推送方法。该基于RabbitMQ的消息推送方法,对消息确认机制,定时任务机制和生产者消费确认机制进行了优化处理。该基于RabbitMQ的消息推送方法,将RabbitMQ中生产者的确认过程与消费者的确认过程结合起来进行优化使生产者可以更加稳定的获知消费者成功接收到消息,提高了持久化消息的发送速率;在消费者确认过程中,优化了消费者确认过程,处理了消费者拒绝消息的情况,能够防止消费者收到重复消息,使系统整体得到更大的性能提升,稳定性更好。
技术领域
本发明涉及web消息推送技术领域,特别涉及一种基于RabbitMQ的消息推送方法。
背景技术
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
消息队列则是被应用于众多系统中的常用技术,消息队列的异步化和松耦合机制,可以提升系统资源的利用率和系统的可扩展性,同时消息队列自带分布式和容灾特性,从而提升系统性能和容错能力。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。ConnectionFactory为Connection的制造工厂。
Queue(队列)是RabbitMQ的内部对象,用于存储消息。
生产者P将消息发送到Exchange(交换器),由Exchange(交换器)将消息路由到一个或多个Queue(队列)中(或者丢弃)。
RabbitMQ中通过Binding将Exchange(交换机)与Queue(队列)关联起来,这样RabbitMQ就知道如何正确地将消息路由到指定的Queue(队列)了。
RabbitMQ中的消息都只能存储在Queue(队列)中,生产者P生产消息并最终投递到Queue(队列)中,消费者C可以从Queue中获取消息并消费。在实际应用中,可能会发生消费者收到Queue(队列)中的消息,但没有处理完成就因为出现意外而终止的情况,这种情况下就可能会导致消息丢失。
为了保证消息的可靠性,即消息确实发送了,也确实被消费了而且不能被重复消费,本发明提出了一种基于RabbitMQ的消息推送方法。
发明内容
本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于RabbitMQ的消息推送方法。
本发明是通过如下技术方案实现的:
一种基于RabbitMQ的消息推送方法,其特征在于:对消息发送确认机制进行优化处理,具体优化如下:
第一,消息确认机制
通过设置触发setReturnCallback回调来防止交换机(Exchange)没找到队列(Queue)就丢弃消息,通过回调告知用户检查问题;
第二,定时任务机制
通过定时任务拉取投递失败的消息,重新投递;
第三,生产者消费确认机制
在消费端通过AOP(Aspect Oriented Programming,面向切面编程)拦截和手动ACK(Acknowledgement,确认字符)保证多次消费的消费幂等性。
所述定时任务机制中,通过设置定时任务和重新投递次数来定时拉取投递失败的消息并重新投递消息。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于山东汇贸电子口岸有限公司,未经山东汇贸电子口岸有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010247669.6/2.html,转载请声明来源钻瓜专利网。





