MSMQ для обмена данными между сервером и клиентом

StackOverflow https://stackoverflow.com/questions/833773

  •  08-07-2019
  •  | 
  •  

Вопрос

Мы искали MSMQ для постоянного & # 8216; push & # 8217; связь сервера с клиентом. На сервере может быть до 1000 клиентов.

В одном из наших тестов мы отправили небольшое сообщение 300 автономным клиентам, а затем отправили сообщение онлайн-клиенту. Последнее сообщение было задержано более чем на 40 минут, поскольку MSMQ пробирался через недоставленные сообщения (наблюдаемые через MMC). Мы также используем MSMQ для обратного пути, где он работает хорошо.

Можно ли как-то настроить MSMQ в соответствии с этим шаблоном использования, сократив количество попыток подключения к автономному хосту? Если нет, то есть ли какой-либо другой продукт для очередей, который бы лучше подходил, или это ваш собственный день? Необработанная пропускная способность не является приоритетом, но количество исходящих очередей и предсказуемость / максимальная задержка равны, как и объем памяти на клиентах (которые могут быть довольно старыми машинами).

Это было полезно?

Решение 2

Наше решение состояло в том, чтобы программно приостанавливать очереди для компьютеров, которые были отключены (у нас уже было UDP-сообщение о том, работают ли клиенты) через один из COM-интерфейсов управления MSMQ.

Приостановив очереди на известные отключенные хосты, MSMQ тратил гораздо меньше времени на обработку недоставленных сообщений.

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

Другие советы

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

Быстрое решение проблемы с автономным сценарием может заключаться в увеличении количества потоков, доступных для MSMQ, который использует поток для каждой исходящей очереди. Каждая попытка подключения в автономном режиме занимает некоторое время, блокируя поток. http://technet.microsoft.com/en-us/library/cc957498.aspx Попробуйте создать столько потоков, сколько сможете.

Мои коллеги работали с ActiveMQ и сказали, что он намного более гибок, но работает лучше. Я лично не работал с этим, но я бы изучил это, если вы не привязаны к .Net.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top