随笔分类 - RabbitMQ
摘要:何时该用 MQ 大致可以分为下面四种场景 削峰限流:当上游能力远大于下游处理能力 数据驱动的任务依赖:任务之间有一定的依赖关系 上游不关心下游执行结果:解耦 异步返回执行时间长:离线处理,或者跨公网调用等 不应该使用 MQ 上游实时关注执行结果 保证消息不丢失 以 RabbitMQ 为例 生产者开启
阅读全文
摘要:持久化虽然能解决 RabbitMQ 宕机数据丢失问题,但还有个问题就是,消息到底有没有正确到达服务器呢。如果不进行特殊配置,消息发送出去后,是没有任何操作来告诉生产者消息是否到达服务器。消息在到达服务器之前就丢失了,持久化也解决不了问题。因为消息都没有,谈何持久化。 RabbitMQ 为了针对这个问
阅读全文
摘要:RabbitMQ 的持久化分为三个部分: 交换器的持久化 队列的持久化 消息的持久化 交换器的持久化 交换器的持久化是在声明交换器时将 durable 设为 true。如果交换器没有设置持久化,那么 RabbitMQ 宕机重启后,交换器相关的元数据会丢失,不过相关的消息不会丢失,只是不能将消息发送到
阅读全文
摘要:通过上篇《【RabbitMQ 笔记】— 死信队列》的了解,我们知道队列中的消息过期后会被 RabbitMQ 转发到 DLX(前提是要为队列添加 DLX),进而路由到死信队列。而正好可以利用这个功能(DLX + TTL)来实现延时队列,废话不多说,先看图 图中为每个过期时间设置了单独的队列,比如 qu
阅读全文
摘要:死信交换器,Dead Letter Exchange,下文简称 DLX。当消息在一个队列中变成死信(Dead Letter)之后,它会被发送到另一个交换器中,这个交换器就是 DLX,绑定 DLX 的队列就称为死信队列。 消息变成死信一般由以下几种情况: 消息被拒绝(Basic.Reject / Ba
阅读全文
摘要:通过上一篇【RabbitMQ 笔记】— 基本概念,知道生产者和消费者使用到的主要类和接口有 ConnectionFactory、Connection、Channel、Consumer 等。Connection 是用来开启 Channel 的,RabbitMQ 开发工作也基本上是围绕 Connecti
阅读全文
摘要:RabbitMQ 整体上是一个生产者消费者模型,主要负责接收、存储和转发消息。整体模型架构图如下: 生产者和消费者 生产者 Producer:生产者,就是投递消息的一方。生产者创建消息,然后发布到 RabbitMQ 中。 消息一般可以分为两部分: 消息体(payload):带有业务逻辑结构的数据,比
阅读全文