Подтвердить что ты не робот

MSMQ один (очередь) для многих (слушателей) сценария

У меня такой сценарий: один клиент отправляет сообщение в экземпляр очереди msmq, и есть три процесса, которые прослушивают эту очередь. Я хочу, чтобы каждый из этих экземпляров мог выбрать другое сообщение и обработать его.

Я знаю, что это обычный сценарий использования для очередей, и у меня уже есть рабочий код для этого, используя MSMQ,.NET и С#.

Однако мне интересно, является ли msmq лучшим вариантом здесь - в документации четко указано, что MSMQ предназначен для связи "один к одному", а это значит, что не должно быть более одного слушателя.

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

Приветствуется ссылка на рабочий пример, демонстрирующий использование MSMQ в этом типе сценария.

Спасибо

4b9b3361

Ответ 1

Как я понимаю, вы используете несколько слушателей, чтобы сделать что-то вроде балансировки нагрузки. Это абсолютно допустимый сценарий, который часто используется в кластерных средах или сценариях балансировки нагрузки, когда один слушатель не может потреблять все входящие сообщения. Btw. кластерная BizTalk одинаково расходует сообщения MSMQ.

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

Также можно использовать одну очередь для доставки одного сообщения нескольким слушателям. Этот сценарий не рекомендуется с MSMQ, даже если это технически возможно с помощью триггеров.

Если ваши слушатели прослушивают только сообщения с некоторыми специальными свойствами, идентифицируя, какой слушатель должен использовать это сообщение (т.е. вы ищете сообщения в очереди), вы должны определенно использовать три очереди.

Ответ 2

"в документации четко указано, что MSMQ предназначен для связи" один к одному ", что означает, что не должно быть более одного слушателя".

У вас есть ссылка для этого?

MSMQ использует два способа доставки:
1-1: один отправитель, одна целевая очередь
1-M: одна многоадресная передача отправителю во многие очереди назначения

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

Ответ 3

Похоже, вам нужна служебная шина - однако они, как правило, несколько тяжеловесы, поэтому это может быть излишним. С помощью служебной шины вы можете настроить сценарии публикации подписки, в которых любое количество слушателей может подписаться на сообщения. NServiceBus - служебная шина, которая несколько проста в использовании (и построена поверх MSMQ); есть бесплатная версия, которая ограничена 30 сообщениями в секунду. Rhino ESB также претендует на легкий вес.