Как сделать так, чтобы очередь MSMQ прослушивалась двумя серверами - PullRequest
0 голосов
/ 29 января 2010

Я пытаюсь заставить очередь прослушиваться двумя различными приложениями, но пока мне это не удалось.

Я пробовал оба метода BeginPeek и BeginReceive, но ни один из них не работал. Если я использую BeginReceive вместе с событием ReceiveCompleted, только один сервер получает сообщение. Если я использую BeginPeek вместе с PeekCompleted, система работает в цикле или, если мне удается удалить сообщение из очереди, его получает только один сервер.

Есть какие-нибудь подсказки, как этого добиться?

1 Ответ

0 голосов
/ 29 января 2010

Обычные методы очереди не подойдут для вашего случая, потому что, ну, это очередь, так что первым пришел, первым обслужен. У вас есть несколько вариантов.

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

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

...