微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
服务异步通讯
文章目录
- 微服务框架
- 服务异步通讯
- 51 死信交换机
- 51.1 初识死信交换机
- 51.1.1 初识死信交换机
- 51.1.2 总结
51 死信交换机
51.1 初识死信交换机
51.1.1 初识死信交换机
当一个队列中的消息满足下列情况之一时,可以成为死信(dead letter):
- 消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false
- 消息是一个过期消息,超时无人消费
- 要投递的队列消息堆积满了,最早的消息可能成为死信
如果该队列配置了dead-letter-exchange【死信交换机】属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为死信交换机(Dead Letter Exchange,简称DLX)。
【举个栗子】
又是这个简单的结构模型,生产者 → 交换机 → 队列 → 消费者
现在有一个消息到达 了消费者
这时消费者 采用的是默认的失败重试 策略,它会一直重试,重试资源耗尽后,它会拒绝这个消息
消息一旦被拒绝,默认情况就会被丢弃了
如果不想丢弃,就必须给simple.queue 绑定一个死信交换机
这样这个dl.direct 就成了 simple.queue 的死信交换机 了
这个时候这个消息就不会 被丢弃了,而是变成一个 死信回到队列,队列再投递到 死信交换机
当然这个死信交换机也是不能存储 数据的,所以还要绑定一个队列
这个死信就会到达 这个队列【“死信队列”】
而且如果死信交换机和死信队列 有路由key ,simple.queue 还必须知道这个key 才能正确转发【而且 一定能够达到 死信队列】
51.1.2 总结
什么样的消息会成为死信?
- 消息被消费者reject或者返回nack
- 消息超时未消费
- 队列满了
如何给队列绑定死信交换机?
- 给队列设置dead-letter-exchange属性,指定一个交换机
- 给队列设置dead-letter-routing-key属性,设置死信交换机与死信队列的RoutingKey