之前放在有道云笔记,现在分享出来
RabbitMq
自动签收,也就是自动ack,都是执行完方法再签收的,本身使用了AOP方式来自动签收ack。
所以手动签收如果放到最后,其实是一样的。
不管是自动签收,还是手动签收,在开启了次数重试之后,重试到application.yml里面写的配置的次数之后,就会进入DLQ,如果配了的话。
关于什么样的消息才会进DLQ,如果配了DLQ的话,RabbitMq是每个队列都可以配独立的DLQ的,所以DLQ能单独处理。
消息进DLQ的情况:
- 设置了超时时间的消息,在队列待到超时后,会进入配置好的DLQ,如果没有配置DLQ,会直接丢失消息。
- 当队列满了之后,进来的消息,会被丢到DLQ,如果没有DLQ,会直接丢失消息。
- 重试到规定次数,还没有签收的消息,会被丢到DLQ,如果没有DLQ,会直接丢失消息。
关于保证消息传递:
1)保证生产者消息投递到队列,那就需要comfirm机制,投递之后回调comfirm方法,判断ack,是true,就是投递成功,false,就是失败,失败就可以重新产生消息;
2) 保证消费者消息成功,使用手动ack,失败重试
1)简单队列,不经过交换机,直接经过队列
2)工作队列,就是谁ack快,谁就多消费一些消息
3) 交换机 fanout ,所有队列收到一样的消息
4) 交换机 direct ,根据队列绑定交换机时的routingKey,消息带着什么routingKey,就投递到哪个队列
5)交换机 topic,这个并不是主体的意思,在RabbitMq里是direct的通配符版