RabbitMQ
DatDreamer
这个作者很懒,什么都没留下…
展开
-
secKill项目 --- 可靠性传输的实现 及 易错点总结
本文只讨论可靠性传输相关的问题,预减库存的问题在另一篇博客:如何实现消息的可靠性传输,已在其他两篇博文中总结了,此处不赘述RabbitMQ实现可靠性传输 理论篇RabbitMQ实现可靠性传输 代码篇这里记录一下易错的,需要注意的点:消息的唯一ID是需要手动分配的,消息的持久化也是需要额外做的。两者都需要通过MessagePostProcessor完成限制重发次数交由定时任务完成。重发需要注意的点:超出限制后,记得移除redis中的相关key,并入库记录重发时,消息的co原创 2020-08-14 15:04:05 · 1413 阅读 · 1 评论 -
RabbitMQ实现可靠性传输 代码篇
本文为代码篇,建议先看理论篇,点击跳转实现可靠性传输的理论篇对应的实操代码。业务相关的都用了伪代码,方便理解。环境:springboot 2.1.9.RELEASE + amqp-client-5.4.3.jar生产者确认模式application.propertiesspring.rabbitmq.publisher-confirms=true主动分配唯一Id:(这里其实需要预处理器MessagePostProcessor,在持久化的内容中有讲)public void sendMe原创 2020-08-13 23:23:35 · 689 阅读 · 0 评论 -
RabbitMQ实现可靠性传输 理论篇
本文为理论版,另有代码版:本文内容是在参考了大量资料的同时,自己实操得出来的结论。笔者代码环境:springboot 2.1.9.RELEASE + amqp-client-5.4.3.jar如图所述,需要从三个方面解决问题:生产端,MQBroker,消费端。文章目录生产者确认模式如何保证投递成功无法被路由的消息处理如何持久化消息队列如何保证消费成功(或限流处理)生产者确认模式定义:当消息确认到达Broker后回调,(即只确认是否正确到达 Exchange 中),broker会发送一原创 2020-08-13 23:19:35 · 695 阅读 · 0 评论 -
RabbitMQ 消费者确认auto 和 manual 模式对异常的处理区别(含重试、requeue的影响)
本文用于解答下述疑问:消息在下面四个条件的处理方式:两种模式是否有异常、是否捕获异常是否设置重试requeue为true / false ( + default-requeue-rejected的影响)看似是 2 4 种方案,让人头疼,但其实没那么复杂。总结中也会给出简洁的答案。文章目录正文auto自动确认manual人工确认default-requeue-rejected 属性导致死循环的情况总结正文本文环境: springboot 2.1.9.RELEASE + amqp-cli原创 2020-08-12 09:49:16 · 4781 阅读 · 2 评论 -
RabbitMQ 消费者如何获取生产者设置的correlationId + 得到CorrelationId为空的解决方案 + 源码解析
本文解决:RabbitMQ消息者如何获取生产者设置的correlationId获取到的CorrelationId为空本文环境:springboot 2.1.9.RELEASE + amqp-client-5.4.3.jar本文分两部分,第一部分先直接给代码实现,第二部分进行原理解析。实现代码交换机、路由那些就自己改吧,附上全部代码很累赘,只说关键点注册一个bean@Beanpublic MessagePostProcessor correlationIdProcesso原创 2020-08-11 09:28:53 · 6065 阅读 · 0 评论 -
RabbitMQ,消费者获取correlationId或correlationIdString均为null的解决方案 + 源码层面解析
请留步找这个问题的,估计很多人都是找的资料都是一样的,多个抄袭的网站都是下图的答案。但实际操作就发现,这个代码是不全的,比如:this.buildMessage(content,correlationId.getId()),这个方法就是没附上的。直接黑人问号。先下个结论:按照该网站的做法,还是无法解决问题本文环境:springboot 1.5.8.RELEASE + amqp-client 4.0.3,后续版本可能修复。原本没有指定version,但2020.8.10,尝试用了最新版本的amq原创 2020-08-10 16:29:39 · 2885 阅读 · 0 评论