Балансировка нагрузки службы с очередью msmq? - PullRequest
3 голосов
/ 07 ноября 2011

Можно ли использовать очередь MSMQ для балансировки запросов?Если у меня клиенты 1-n отправляют запросы в службу WCF, которая затем ставит в очередь каждый запрос, и имеют в фоновом режиме 1-n серверов, каждый из которых получает следующий доступный запрос по мере их поступления, я бы предположил, что это эффективно распределяет нагрузку.Однако как бы я тогда получил ответ?Я понимаю, что могу подписаться на «завершенные» события в своем сервисе WCF, но тогда мне придется анализировать все события, когда меня волнует только одно. Как я мог реализовать какой-то механизм обратного вызова с этой архитектурой?

Ответы [ 2 ]

4 голосов
/ 07 ноября 2011

Если вы используете MSMQ для отправки событий, то нет встроенной концепции «получения ответа».

Вот решение: каждый из клиентов может иметь собственную очередь сообщений, которую они прослушивают.,Когда рабочие выполнили свои задачи, они могут отправить клиенту «завершенное» сообщение.

Но как сервер узнает адрес очереди сообщений клиента?

Один из подходов будетпредоставить адрес очереди сообщений клиента в качестве параметра в каждой функции.

Лучше было бы включить этот адрес в качестве пользовательского значения заголовка.Настраиваемое решение для заголовка - лучший подход по двум причинам.Во-первых, это можно настроить с помощью файла конфигурации клиента, что позволяет изменять детали очереди после развертывания.Во-вторых, никогда не желательно, чтобы детали коммуникационного «трубопровода» вмешивались в уровень абстракции вызова функции, а решение с настраиваемым заголовком позволяет этого избежать.

См. этот вопрос дляпример использования пользовательских заголовков.

1 голос
/ 07 ноября 2011

Вы можете попросить рабочих поместить ответы в отдельную очередь ответов.Затем просто используйте какой-то уникальный идентификатор для каждой пары запрос-ответ, чтобы определить правильный ответ.

...