RabbitMQ在“确认”模式下的通道行为
我在理解RabbitMQ的确认方面遇到了一些麻烦,我从RabbitMQ看到以下解释:
笔记
如果代理在所述消息写入磁盘之前崩溃,代理将丢失持久性消息。 在某些情况下,这会导致经纪人以令人惊讶的方式行事。 例如,考虑这种情况:
客户端发布持久消息给持久队列
客户端使用队列中的消息(注意消息是持久的并且队列持久),但还没有确认,
经纪人死亡并重新启动,并且
客户端重新连接并开始消费消息。
此时,客户可以合理地认为该消息将再次发送。 情况并非如此:重新启动导致代理丢失消息。 为了保证持久性,客户应该使用确认。 如果发布者的频道处于确认模式,则发布者不会收到丢失消息的确认(因为消费者没有确认并且没有写入磁盘)。
然后我使用这个http://hg.rabbitmq.com/rabbitmq-java-client/file/default/test/src/com/rabbitmq/examples/ConfirmDontLoseMessages.java来做一些基本的测试并验证确认,但是得到一些奇怪的结果:
由于我是RabbitMQ的新手,任何人都可以告诉我我的确认理解问题在哪里?
我的理解是,“渠道确认”对于经纪人来说确认它成功地从生产者那里获得了消息,而不管消费者是否知道该消息。 有关详细信息,请参阅http://www.rabbitmq.com/confirms.html,具体取决于队列类型和消息传递模式,
消息在以下情况下得到确认
老问题,但哦..
我将所有消息发布到队列中并逐个消费消息,然后在消费过程中停止rabbitmq服务器,我现在期望的是在rabbitmq服务器重新启动后,左侧的消息将丢失,因为通道未确认模式,但在服务器重新启动后,我仍然可以看到队列中的所有其他消息。
这实际上是如何工作的,如果启用了持久性。 如果服务器崩溃或出现其他问题,则无法确认消息,因此不会从队列中删除。
只有在确认要处理消息时才会将消息从队列中删除,或者在服务器崩溃之前代理尚未将其写入内存或磁盘。
如果需要,确认和确认可以启动,制片人不会等待赞赏。 我现在找不到确切的命令,但它确实存在。
更多关于acks和确认:https://www.rabbitmq.com/reliability.html
链接地址: http://www.djcxy.com/p/10159.html