随笔分类 - RabbitMQ实战
摘要:Github仓库地址: https://github.com/imtudou/imtudou.microservices/tree/master/net/samples/rabbitmq 什么是消息中间件 MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队
阅读全文
摘要:Producer:生产者 Consumer:消费者 RabbitMQ:中间的框是一个队列-RabbitMQ 代表使用者保留的消息缓冲区 依赖 <PackageReference Include="RabbitMQ.Client" Version="6.4.0" /> 生产者代码 using Rabb
阅读全文
摘要:工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。 轮询分发消息 封装获取Channel代码 usin
阅读全文
摘要:生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消 息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被投递到所有匹配的队列之后,broker 就会 发送一个确认给生产者(包含消息的唯一 ID),这就使得生产者知道消息已经正确到达目的队列了,
阅读全文
摘要:RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中。相反,生产者只能将消息发送到交换机(exchange),交换机工作的内容非常简单,一方面它接收来自生产者的消息,另一方面将它们推入队列。交换机必须确切知道
阅读全文
摘要:概念 死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息进行消费,但某些时候由于特定的原因导致 queue 中的某些消息无法被消费,这样的消息如果没有后续的处理,就变
阅读全文
摘要:概念 延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列 死信队列的一种,设置死信队列 TTL即为延迟队列 场景 订单在十分钟之内未支付则自动取消 新创建的店铺,如果
阅读全文
摘要:在生产环境中由于一些不明原因,导致 rabbitmq 重启,在 RabbitMQ 重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。如何才能进行 RabbitMQ 的消息可靠投递呢? 特别是在这样比较极端的情况,RabbitMQ 集群不可用的时候,无法投递的消息该如何处理呢? 消息回退(
阅读全文
摘要:幂等性 MQ消费者的幂等性的解决一般使用全局ID或者写个唯一标识比如时间戳或者UUID或者订单消费者消费MQ中的消息也可利用MQ的该id来判断,或者可按自己的规则生成一个全局唯一id,每次消费消息时用该id先判断该消息是否已消费过 在海量订单生成的业务高峰期,生产端有可能就会重复发生了消息,这时候消
阅读全文
摘要:搭建集群 镜像队列 默认情况下node1创建的队列不会同步到node2上 此时如果已经发送到了一条消息到node1上的队列,该队列并不会备份到node2上此时node1宕机并重启,该消息会丢失,配置对应策略可保证集群上队列备份并且消息不丢失 负载均衡 生产者给node1发消息,此时node1宕机,但
阅读全文