Поведение каналов в режиме «подтверждения» с RabbitMQ

У меня проблемы с пониманием подтверждения RabbitMQ, я вижу следующее объяснение от RabbitMQ:

Примечания

Брокер теряет постоянные сообщения, если он вылетает перед тем, как указанные сообщения записываются на диск. При определенных условиях это заставляет брокера вести себя неожиданным образом.Например, рассмотрим этот сценарий :

  • клиент публикует постоянное сообщение в устойчивой очереди

  • , клиент потребляет сообщение из очереди (отмечая, что сообщение является постоянным, а очередь устойчивой), но еще не подтвердил это,

  • брокер умирает и перезапускается, а

  • клиент повторно подключается и начинает получать сообщения.

На этом этапе клиент может разумно предположить, что сообщение будет доставлено снова. Это не так: перезапуск привел к тому, что брокер потерял сообщение. Чтобы гарантировать постоянство, клиент должен использовать подтверждения. Если бы канал издателя находился в режиме подтверждения, издатель не получил бы подтверждения для потерянного сообщения (так как потребитель не подтверждал его и его не было { {1}} записано на диск).

Затем я использую этот http://hg.rabbitmq.com/rabbitmq-java-client/file/default/test/src/com/rabbitmq/examples/ConfirmDontLoseMessages.java , чтобы сделать некоторые базовый тест и проверка подтверждения, но получаются странные результаты:

  1. Метод waitForConfirmsOrDie не блокирует производителя, что отличается от моих ожиданий, я полагаю, что waitForConfirmsOrDie заблокирует производителя, пока все сообщения не будут подтверждены или один из них не работает.
  2. Я удаляю channel.confirmSelect () и channel.waitForConfirmsOrDie () от издателя и меняю потребителя с автоматического подтверждения на ручное подтверждение, я публикую все сообщения в очереди и потребляю сообщения одно за другим, затем я останавливаю сервер rabbitmq во время процесса потребления, теперь я ожидаю, что это левые сообщения будут потеряны после перезапуска сервера rabbitmq, потому что канал не находится в режиме подтверждения, но я все еще вижу все другие сообщения в очереди после перезапуска сервера.

Поскольку я новичок в RabbitMQ, может ли кто-нибудь сказать мне, в чем моя проблема с подтверждением понимания?

9
задан Bo Persson 20 September 2012 в 03:14
поделиться