消费者有问题不要慌,
异常里面拒绝, 让重新投递!
或者还有死信
消息的拒绝方式
- Reject
- Nack
2个方式都有一个是否消息的重新投递的参数 requeue=false就是不重新入队 而是死掉了
Reject
这样最终都会投去其他消费者
如果就我一个消费者, 这样重新入队重新投递就会死循环了
有3个消费者, 12正常 3是上图的拒绝重新投递
10个消息
最终是
1:1,4,7,10,9
2:2,5,8,3
,6
3:
这是因为, 轮询(拒绝的还是会轮到)+重新投递的入队尾
Nack
和上面的不同就是, 多个参数, 可以一次性拒绝前面没应答的
死信
一般是 限时订单 用的
死了的情况:
- 队列达到最大容量的时候(如果设置最大255来了256第一条死掉),最老的一条
- 队列过期或者消息本身过期
- 拒绝不重新入队尾
队列声明的时候, 传入其作为死信交换器的交换器的名字就行
死信路由键可以不指定, 用原来的
队列最大消息数:
可以手动设
一般不设, 最大限制就是靠机器性能了
死信交互器和备用交换器区别
使用上:
备用交换器是主交换器声明的时候传名字, 是给交换器的
死信交互器 是队列声明的时候传名字, 是给队列的
作用:
备用交换器: 给生产者的, 主交换器投不出去队列了, 到这来, 没进入队列时的,保证生产者消息不丢失
死信交互器: 给消费者的, 队列之后的, 保证消费者这边消息不丢失