Обратный вызов клиента RabbitMQ c # при активированном противодавлении TCP? - PullRequest
1 голос
/ 16 февраля 2012

Я не нашел способа определить, когда издатель зависает из-за противодавления tcp (управление потоком). Для моего приложения висят какие-либо темы в значительной степени недопустимо. Мне нужно прервать операцию публикации, если она не происходит быстро. Я заметил, что клиент Pika имеет обратный вызов для этого, но ничего не смог найти в документации клиента c #. У кого-нибудь есть решение для этого? Я мог бы создать фоновую задачу для публикации и прервать поток по истечении некоторого времени ожидания, но это кажется сложным, и у thread.abort есть свои проблемы.

1 Ответ

4 голосов
/ 19 февраля 2012

Причина, по которой RabbitMQ переключился с явного управления потоком на регулирование через обратное давление TCP, заключается в поддержке большего количества клиентов (многие из которых не могут обрабатывать асинхронные методы, такие как channel.flow). К сожалению, способ, которым это сделано, и, возможно, способ, которым это должно быть сделано, полностью прозрачен для издателей - у нет способа , чтобы издатель мог сказать, когда его душат.

Если у вас действительно есть одна надежная гарантия публикации в реальном времени, ваш единственный выбор - ввести тайм-аут вручную. Конечно, это не решает основную проблему перегрузки RabbitMQ, поэтому остановка публикации, разрыв соединения и открытие нового не приблизит вас к повторной публикации.

Итак, вам нужно либо 1) пересмотреть, зачем вам нужны такие строгие гарантии для публикации, либо 2) добавить больше узлов в кластер RabbitMQ (который очень прост и предназначен именно для улучшения этой ситуации). ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...