“中渠道的行为”;“确认”;带RabbitMQ的模式
我在理解RabbitMQ的确认时遇到了一些问题,我从RabbitMQ中看到了以下解释: 注释 如果代理在此之前崩溃,则会丢失持久消息 消息被写入磁盘。在某些情况下,这会导致 经纪人的行为举止令人惊讶。例如,考虑这个 情景:“中渠道的行为”;“确认”;带RabbitMQ的模式,rabbitmq,Rabbitmq,我在理解RabbitMQ的确认时遇到了一些问题,我从RabbitMQ中看到了以下解释: 注释 如果代理在此之前崩溃,则会丢失持久消息 消息被写入磁盘。在某些情况下,这会导致 经纪人的行为举止令人惊讶。例如,考虑这个 情景: 客户端将持久消息发布到持久队列 客户机使用队列中的消息(注意消息是持久的,队列是持久的),但尚未确认它 代理死亡并重新启动,并且 客户端重新连接并开始使用消息 此时,客户机可以合理地假设消息 将再次交付。情况并非如此:重启导致 代理可能会丢失消息。为了保证持久性,一个 客
- 客户端将持久消息发布到持久队列
- 客户机使用队列中的消息(注意消息是持久的,队列是持久的),但尚未确认它
- 代理死亡并重新启动,并且
- 客户端重新连接并开始使用消息
- 它决定消息不会路由到队列 (如果设置了强制标志,则首先发送basic.return)或
- 临时消息已到达其所有队列(和镜像)或
- 持久消息已到达其所有队列(和镜像),并被持久化到磁盘(和fsynced)或
- 已从其所有队列中使用(并在必要时确认)持久消息
- 老问题,但哦,好吧
我将所有消息发布到队列并逐个消费消息,然后在消费过程中停止rabbitmq服务器,现在我希望rabbitmq服务器重新启动后,留下的消息将丢失,因为通道未处于确认模式,但在服务器重新启动后,我仍然可以看到队列中的所有其他消息
如果启用了持久性,它实际上应该是这样工作的。如果服务器崩溃或出现其他问题,则无法确认消息,因此不会从队列中删除消息
只有在确认消息已被处理,或者在服务器崩溃之前代理尚未将其写入内存或磁盘时,才会从队列中删除消息
如果需要,可以设置确认和确认,并且制作人不会等待确认。我现在找不到它的确切命令,但它确实存在
有关ACK和确认的更多信息: