Что такое MQ и почему я хочу его использовать? - PullRequest
34 голосов
/ 19 мая 2010

В моей команде на работе мы широко используем технологию IBM MQ для взаимодействия между приложениями. Я недавно видел в Hacker News и других местах о других технологиях MQ, таких как RabbitMQ . У меня есть общее представление о том, что это такое (часто проверяемая область для размещения и получения сообщений), но что я хочу знать, в чем именно это хорошо? Как я узнаю, где я хочу его использовать и когда? Почему бы просто не придерживаться более элементарных форм межпроцессного обмена сообщениями?

Ответы [ 6 ]

59 голосов
/ 20 мая 2010

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

Представьте себе: вам нужно общаться с двумя или тремя другими системами. Общепринятым подходом в наши дни будут веб-сервисы, которые подойдут, если вам сразу нужны ответы.

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

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

13 голосов
/ 19 мая 2010

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

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

Вы можете делать все это вручную с помощью сокетов, но это очень сложно.

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

7 голосов
/ 19 мая 2010

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

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

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

Системы MQ обычно позволяют пользователям просматривать содержимое очереди, писать плагины, очищать очередь и т. Д.

2 голосов
/ 19 мая 2010

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

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

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

0 голосов
/ 28 марта 2015

ссылка: веб-сервисы могут быть недоступны и недоступны - что вы тогда делаете? Как продолжение к этому; Что делать, если ваша локальная сеть и ваш локальный компьютер не работает? Пока вы ждете, пока система восстановит зависимые развернутые системы в другом месте, ожидая, что эти данные должны увидеть альтернативный поток данных. В противном случае это может быть недостаточно хорошим ответом «в реальном времени» для сегодняшних и очень скоро будущих требований Интернета вещей (IOT).

если вы хотите истинно параллельное, энергонезависимое хранение различных потоков FIFO (по крайней мере, в некоторой точке вдоль цепочки сигналов), используйте память FPGA и FRAM. FRAM работает на тактовой частоте, и устройства FPGA могут быть перепрограммированы на лету, добавляя и убирая, однако необходимо много независимых параллельных потоков данных (в пределах установленных ограничений, конечно).

0 голосов
/ 19 мая 2010

Очереди сообщений формируют основу для многих шаблонов, описанных в классической книге «Шаблоны интеграции предприятий» и веб-сайт .

...