В блоге пост RabbitMQ на Publisher Confirms говоритРазличать ОППЫ и другие ошибки при работе в режиме подтверждающего
, если соединение между издателем и брокером падает с выдающимися подтверждает, что не обязательно означает, что сообщения были утеряны, поэтому повторная публикация может привести к дублированию сообщений.
Это означает, что IModel.WaitForConfirmsOrDie()
будет сгенерировано исключение (так же, как быстрый тест подтвердил), когда соединение с брокером падает во время ожидания Ack
, но сообщение все равно может быть доставлено. Есть ли способ отличить, посмотрев на исключения, будь то определенно не был доставлен
- сообщение
- сообщение может быть доставлено
Другими словами, существует ли способ, безусловно, различать все (потенциально возможные) Nack
s (= не доставлено) от других ошибок, таких как сброшенные соединения (после того, как сообщение было принято у брокера)?
АНИ документы говорят только
Если NACK получен, бросает исключение OperationInterruptedException сразу
В моем «уронить соединение» тест, ап (исключение, полученный из) OperationInterruptedException был брошен в так что, похоже, исключает просмотр только типа исключения.