每日一句
物是人非事事休,欲语泪先流。
概述
为了保证消息在发送过程中不丢失,RabbitMQ引入了消息应答机制,
消费者在接收到消息并且处理该消息后,告诉RabbitMQ它已经处理了,RabbitMQ可以把消息删除了。
自动应答
消息发送后立即被认为已经传送成功,这种模式需要在高吞吐量和数据传输安全性方面做权衡。
因为这种模式有两种情况会出问题:
1。如果消息在接收到之前,消费者那边出现连接或者channel关闭,那么消息就丢失了。
2。消费者这边由于接收太多还来不及处理的消息,导致这些消息的积压,最终使得内存耗尽,最终这些消费者线程会被操作系统杀死。
所以这种模式仅适用于在消费者可以高效并以某种速率能够处理这些消息的情况下使用。
消息应答的方法
A.Channel.basicAck(用于肯定确认) RabbitMQ 已知道该消息并且成功的处理消息,可以将其丢弃了
B.Channel.basicNack(用于否定确认)
C.Channel.basicReject(用于否定确认) 与 Channel.basicNack 相比少一个参数,不处理该消息了直接拒绝,可以将其丢弃了
Multiple 的解释
手动应答的好处是可以批量应答并且减少网络拥堵
multiple 的