一种基于RabbitMQ的消息推送方法技术

技术编号:24937512 阅读:87 留言:0更新日期:2020-07-17 20:50
本发明专利技术特别涉及一种基于RabbitMQ的消息推送方法。该基于RabbitMQ的消息推送方法,对消息确认机制,定时任务机制和生产者消费确认机制进行了优化处理。该基于RabbitMQ的消息推送方法,将RabbitMQ中生产者的确认过程与消费者的确认过程结合起来进行优化使生产者可以更加稳定的获知消费者成功接收到消息,提高了持久化消息的发送速率;在消费者确认过程中,优化了消费者确认过程,处理了消费者拒绝消息的情况,能够防止消费者收到重复消息,使系统整体得到更大的性能提升,稳定性更好。

【技术实现步骤摘要】
一种基于RabbitMQ的消息推送方法
本专利技术涉及web消息推送
,特别涉及一种基于RabbitMQ的消息推送方法。
技术介绍
AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息队列则是被应用于众多系统中的常用技术,消息队列的异步化和松耦合机制,可以提升系统资源的利用率和系统的可扩展性,同时消息队列自带分布式和容灾特性,从而提升系统性能和容错能力。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(AspectOrientedProgramming,面向切面编程)拦截和手动ACK(Acknowledgement,确认字符)保证多次消费的消费幂等性。所述定时任务机制中,通过设置定时任务和重新投递次数来定时拉取投递失败的消息并重新投递消息。所述定时任务机制中,每一条消息都和交换机RoutingKey绑定,所有消息重投共用一个定时任务。所述生产者消费确认机制中,消费者在消费消息时,如果消费者业务逻辑出现程序异常,则开启重试机制,并在底层使用AOP拦截;若消费者没有抛出异常,则自动提交事务。如果AOP使用异常通知拦截获取到程序异常,则自动实现补偿机制,将消息缓存到RabbitMQ服务器端;如果消费消息出现异常则根据抛出的异常选择合理的重试机制。若是因为调用第三方接口无法访问,则RabbitMQ自动重试;如果RabbitMQ重试失败,则通过日志记录和健康检查以及人工进行补偿。如果因为网络延迟传输中,消费者出现异常或者消费者延迟消费,会造成进行MQ重试补偿,为了避免在重试过程中造成重复消费,通过使用全局消息ID判断消费者是否消费过解决幂等性问题,并在消费成功后将ID和状态存在日志表中;当发生MQ重试补偿时,从日志表获取并判断此消息ID的状态即可。所述生产者消费确认机制中,确认消息被消费者消费完成后通知服务器将队列里面的消息清除;设置ACK为手动,未被ACK的消息(unacked)会重新入队并被消费,可以更加灵活或人性化来处理业务逻辑代码,更加方便处理异常问题以及数据的返回处理,保证消息不被丢失。本专利技术的有益效果是:该基于RabbitMQ的消息推送方法,将RabbitMQ中生产者的确认过程与消费者的确认过程结合起来进行优化使生产者可以更加稳定的获知消费者成功接收到消息,提高了持久化消息的发送速率;在消费者确认过程中,优化了消费者确认过程,处理了消费者拒绝消息的情况,能够防止消费者收到重复消息,使系统整体得到更大的性能提升,稳定性更好。附图说明附图1为本专利技术基于RabbitMQ的消息推送方法示意图。具体实施方式为了使本专利技术所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合实施例,对本专利技术进行详细的说明。应当说明的是,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。该基于RabbitMQ的消息推送方法,对消息发送确认机制进行优化处理,具体优化如下:第一,消息确认机制通过设置触发setReturnCallback回调来防止交换机(Exchange)没找到队列(Queue)就丢弃消息,通过回调告知用户检查问题;第二,定时任务机制通过定时任务拉取投递失败的消息,重新投递;第三,生产者消费确认机制在消费端通过AOP(AspectOrientedProgramming,面向切面编程)拦截和手动ACK(Acknowledgement,确认字符)保证多次消费的消费幂等性。该基于RabbitMQ的消息推送方法,包括生产者发送消息、生产者消费消息和手动ACK三步。生产者发送消息步骤:在RabbitMQ中,生产者发送消息到Exchange交换器,由Exchange将消息路由到一个或多个Queue中,或者丢弃,此处消息可能发送到Exchange失败。在消息确认机制中,设置setReturnCallback回调确认消息能成功从Exchange路由到Queue,防止Exchange没有找到Queue就丢弃消息。所述定时任务机制中,通过设置定时任务和重新投递次数来定时拉取投递失败的消息并重新投递消息。所述定时任务机制中,每一条消息都和交换机RoutingKey绑定,所有消息重投共用一个定时任务。生产者消费消息步骤:所述生产者消费确认机制中,消费者在消费消息时,如果消费者业务逻辑出现程序异常,则开启重试机制,并在底层使用AOP拦截;若消费者没有抛出异常,则自动提交事务。如果AOP使用异常通知拦截获取到程序异常,则自动实现补偿机制,将消息缓存到RabbitMQ服务器端;如果消费消息出现异常则根据抛出的异常选择合理的重试机制。若是因为调用第三方接口无法访问,则R本文档来自技高网
...

【技术保护点】
1.一种基于RabbitMQ的消息推送方法,其特征在于:对消息发送确认机制进行优化处理,具体优化如下:/n第一,消息确认机制/n通过设置触发setReturnCallback回调来防止交换机没找到队列就丢弃消息,通过回调告知用户检查问题;/n第二,定时任务机制/n通过定时任务拉取投递失败的消息,重新投递;/n第三,生产者消费确认机制/n在消费端通过AOP拦截和手动ACK保证多次消费的消费幂等性。/n

【技术特征摘要】
1.一种基于RabbitMQ的消息推送方法,其特征在于:对消息发送确认机制进行优化处理,具体优化如下:
第一,消息确认机制
通过设置触发setReturnCallback回调来防止交换机没找到队列就丢弃消息,通过回调告知用户检查问题;
第二,定时任务机制
通过定时任务拉取投递失败的消息,重新投递;
第三,生产者消费确认机制
在消费端通过AOP拦截和手动ACK保证多次消费的消费幂等性。


2.根据权利要求1所述的基于RabbitMQ的消息推送方法,其特征在于:所述定时任务机制中,通过设置定时任务和重新投递次数来定时拉取投递失败的消息并重新投递消息。


3.根据权利要求2所述的基于RabbitMQ的消息推送方法,其特征在于:所述定时任务机制中,每一条消息都和交换机RoutingKey绑定,所有消息重投共用一个定时任务。


4.根据权利要求1所述的基于RabbitMQ的消息推送方法,其特征在于:所述生产者消费确认机制中,消费者在消费消息时,如果消费者业务逻辑出现程序异常,则开启重试机制,并在底层使用AOP拦截;若消费者没有抛出异常,则自动提交事务。


5.根据权利要求4所述的基于Rabbit...

【专利技术属性】
技术研发人员:刘瑞魏金雷杨继伟徐士强张咏雪
申请(专利权)人:山东汇贸电子口岸有限公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1