Следует ли мне избегать использования асинхронных методов, если я хочу сохранить порядок сообщений в EasyNetQ? - PullRequest
0 голосов
/ 03 февраля 2019

Я видел это в документации EasynetQ "

EasyNetQ реализует один потребительский поток для экземпляра IBus, поэтому если вы используете стандартный метод не асинхронной подписки, ваш обработчик сообщений будет запускаться синхронно втот же порядок, в котором сообщения доставляются RabbitMQ. Не должно быть необходимости реализовывать блокировку. Если вы используете асинхронную подписку, обработчики по-прежнему будут вызываться по порядку, но, конечно, они могут ACK не в порядке, в зависимости от того, какВы реализуете свой асинхронный обработчик.

Теперь, означает ли это, что я должен избегать использования асинхронных методов (таких как httpClient.SendAsync () или любых асинхронных версий методов) в моем подписчике, если я хочу сохранить порядок сообщений?

Другими словами, у меня есть message1, message2, я хочу обработать message1, а затем message 2. Но если мой подписчик использует методы async / await, тогда message1 и message2 могут быть обработаны не по порядку.

1 Ответ

0 голосов
/ 04 февраля 2019

Вы правы.Кроме того, вы можете установить количество предварительных выборок равным 1, что забирает 1 сообщение за один раз, даже при использовании асинхронного режима, но добавляет много служебной информации mem / cpu и снижает производительность.

Как правило, я бы рекомендовал разрабатывать ваше приложение так, чтобы оно не зависело от порядка сообщений, поскольку это повредит вашей масштабируемости во многих отношениях.И это, вероятно, вернется, чтобы укусить вас другими способами.

...