Что такое очередь сообщений Microsoft (MSMQ)? Как это работает? - PullRequest
49 голосов
/ 30 декабря 2008

Мне нужно работать с MSMQ (Microsoft Message Queuing). Что это, для чего это, как это работает? Чем он отличается от веб-сервисов?

Ответы [ 9 ]

47 голосов
/ 30 декабря 2008

При всем уважении к ответу @ Juan оба способа обмена данными между двумя отключенными процессами, то есть межпроцессными каналами связи (IPC). Очереди сообщений асинхронны, а веб-сервисы синхронны. Для этого они используют разные протоколы и серверные службы, поэтому они совершенно разные по реализации, но схожи по назначению.

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

39 голосов
/ 30 декабря 2008

Как следует из названия, это просто администратор очередей.

Вы можете отправлять объекты (сериализованные) в очередь, где они будут оставаться до тех пор, пока вы их не получите. Обычно он используется для передачи сообщений или объектов между приложениями в разрозненном виде

Это не имеет ничего общего с веб-сервисами, это две разные вещи

Информация о MSMQ :

https://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx

Информация о веб-сервисах :

http://msdn.microsoft.com/en-us/library/ms972326.aspx

28 голосов
/ 30 декабря 2008

Управление транзакционными очередями 101

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

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

  • Хост A отправляет сообщение, но Хост B не подключен

  • Что-то (возможно, но не обязательно инициируется с Host A) откатывает транзакцию

  • B подключается после транзакции откат

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

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

Веб-сервисы

Веб-служба - это удаленный вызов процедуры или другая служба (например, RESTFul API ), опубликованная (обычно) HTTP-сервером. Это протокол синхронного запроса / ответа, в котором нет гарантии доставки, встроенной в протокол. Клиент должен проверить, правильно ли была запущена служба. Обычно это происходит через ответ на запрос или тайм-аут вызова.

В последнем случае веб-сервисы не гарантируют семантику не более одного раза. Сервер может завершить обслуживание и не доставить ответ (возможно, из-за ошибки сервера). Приложение должно быть в состоянии справиться с этой ситуацией.

IIRC, службы RESTFul должны быть идемпотентными (такое же состояние достигается после любого количества вызовов одной и той же службы), , которая представляет собой стратегию для устранения этого отсутствия гарантированного уведомления об успехе / неудаче в архитектуры веб-сервисов. Идея состоит в том, что концептуально каждый пишет состояние, а не вызывает сервис, так что можно писать любое количество раз. Это означает, что приложение может допускать отсутствие обратной связи об успехе, поскольку оно может повторять попытку публикации, пока не получит сообщение «успех» от сервера.

22 голосов
/ 30 декабря 2008

Обратите внимание, что вы можете использовать Windows Communication Foundation (WCF) в качестве уровня абстракции над MSMQ. Это дает вам ощущение работы со службой - только с односторонними операциями.

Для получения дополнительной информации см .: http://msdn.microsoft.com/en-us/library/ms789048.aspx

- larsw

8 голосов
/ 30 декабря 2008

На самом деле нет никакой связи между MSMQ и WebService. Использование MSMQ для межпроцессного взаимодействия (вы также можете использовать сокеты, сообщения Windows, отображенную память). Это служба Windows, которая отвечает за хранение сообщений до тех пор, пока кто-нибудь не выведет их из очереди. Вы можете сказать, что он более надежен, чем сокеты, поскольку сообщения хранятся на жестком диске, но он медленнее, чем другие методы IPC.

Вы можете использовать MSMQ в dotnet с небольшими строками кода, просто объявите свой объект MessageQueue и вызовите методы Receive и Send. Само Сообщение может быть обычной строкой или двоичными данными.

2 голосов
/ 30 декабря 2008

Как все объяснили, MSMQ используется в качестве очереди для сообщений. Сообщения могут быть оберткой для фактических данных, объектов и всего, что вы можете сериализовать и отправить по сети. MSMQ имеет свои ограничения. MSMQ 1.0 и MSMQ 2.0 имели ограничение в 4 МБ. Это ограничение было снято с MSMQ 3.0. Промежуточное программное обеспечение, ориентированное на сообщения (MOM) - это концепция, которая сильно зависит от обмена сообщениями. Основа Enterprise Service Bus основана на обмене сообщениями. Все эти новые технологии зависят от обмена сообщениями для асинхронной доставки данных с надежностью.

1 голос
/ 12 февраля 2016

MSMQ - Microsoft Message Queuing: • MSMQ - это реализация очереди сообщений, разработанная Microsoft. • Он развернут в своих операционных системах Windows Server. • Это протокол обмена сообщениями, который позволяет приложениям, работающим на отдельных серверах / процессах, обмениваться данными безотказно. • MSMQ обычно используется на предприятии для разработки программного обеспечения. • MSMQ обеспечивает надежную доставку, помещая сообщения, которые не достигают своего предполагаемого пункта назначения, в очередь, а затем повторно отправляя их, как только пункт назначения становится достижимым. • MSMQ также поддерживает транзакции. Он допускает несколько операций в нескольких очередях, причем все операции заключены в одну транзакцию, что гарантирует, что все или ни одна из этих операций не вступит в силу. • Технология очереди сообщений (MSMQ) позволяет приложениям, работающим в разное время, обмениваться данными через разнородные сети и системы, которые могут быть временно отключены. Следующие порты используются для операций очереди сообщений Microsoft: • TCP: 1801 • RPC: 135, 2101 *, 2103 *, 2105 * • UDP: 3527, 1801

1 голос
/ 30 декабря 2008

Должно помочь несколько верхних ссылок в поиске Google для "MSMQ" ...

http://msdn.microsoft.com/en-us/library/ms711472(VS.85).aspx

http://www.microsoft.com/windowsserver2003/techinfo/overview/msmqfaq.mspx

http://en.wikipedia.org/wiki/Microsoft_Message_Queuing

Подробнее здесь: http://www.google.com/search?q=MSMQ

0 голосов
/ 21 июля 2014

MSMQ означает очередь сообщений Microsoft.

Это просто очередь, в которой хранится сообщение в форматированном виде, чтобы оно могло передаваться в БД (может на той же машине или на сервере). Есть разные типы очередей, которые классифицируют сообщения между собой. Если в сообщении есть какая-то проблема / ошибка или передано недействительное сообщение, оно автоматически переходит в очередь Dead, что означает, что оно не обрабатывается дальше. Но перед передачей сообщения в мертвую очередь оно будет повторять максимальное число, и пока оно не будет обработано, оно может отправить его в мертвую очередь. Обычно он используется для отправки сообщения журнала с клиентского компьютера на сервер или в БД, чтобы в случае возникновения проблем на клиентском компьютере разработчик или группа поддержки могли просмотреть журнал, чтобы решить проблему. MSMQ - это сервис, предоставляемый Microsoft для получения записи файла журнала и легкого получения решения с использованием файла журнала. Вы получите лучшую идею из этого блога http://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx

...