Реальное использование очередей JMS/сообщений? [закрытый]


Я просто читал abit о JMS и Apache ActiveMQ. И было интересно, для чего в реальном мире люди здесь использовали JMS или аналогичные технологии очереди сообщений ?

11 160

11 ответов:

JMS (ActiveMQ-это реализация брокера JMS) может использоваться в качестве механизма для асинхронной обработки запросов. Вы можете сделать это, потому что запрос занимает много времени для завершения или потому, что несколько сторон могут быть заинтересованы в фактическом запросе. Другая причина его использования-разрешить нескольким клиентам (потенциально написанным на разных языках) доступ к информации через JMS. ActiveMQ является хорошим примером здесь, потому что вы можете использовать протокол STOMP, чтобы разрешить доступ из Клиент C#/Java/Ruby.

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

  • хранить заказ в какой-то сторонней серверной системе (например, SAP)
  • отправьте электронное письмо клиенту, чтобы сообщить им, что их заказ был размещен

для этого код приложения будет публиковать сообщение в очереди JMS, которая включает идентификатор заказа. Одна часть вашего приложения, прослушивающая очередь, может ответить на событие, взяв orderId, просматривая заказ в базе данных, а затем разместив этот заказ в другой сторонней системе. Другая часть вашего приложения может нести ответственность за получение orderId и отправку подтверждения по электронной почте клиенту.

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

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

У меня было так много удивительных применений для JMS:

  • общение в веб-чате для обслуживания клиентов.

  • отладки на сервере. Все серверы приложений транслировали отладочные сообщения на различных уровнях. Затем клиент JMS может быть запущен для отслеживания отладочных сообщений. Конечно, я мог бы использовать что-то вроде syslog, но это дало мне всевозможные способы фильтрации вывода на основе контекстной информации (например, по имени сервера приложений, api вызов, уровень журнала, идентификатор пользователя, тип сообщения и т. д...). Я также раскрасил выход.

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

  • оповещения. Опять же, аналогичная настройка для вышеупомянутого ведения журнала, наблюдения за конкретными ошибками и оповещения людей с помощью различных средств (электронная почта, текстовое сообщение, IM, всплывающее окно Growl...)

  • динамическая настройка и управление кластерами программного обеспечения. Каждый сервер приложений будет транслировать сообщение "configure me", а затем демон конфигурации, который будет отвечать сообщением, содержащим все виды информации о конфигурации. Позже, если все серверы приложений должны были изменить свои конфигурации сразу, это можно было сделать из демона конфигурации.

  • и обычные транзакции в очереди для отложенных действий, таких как выставление счетов, обработка заказов, подготовка, генерация электронной почты...

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

распределенные (a) синхронные вычисления.
Примером реального мира может служить общепрограммная система уведомлений, которая отправляет письма заинтересованным сторонам в различных точках в ходе использования приложения. Таким образом, приложение будет действовать как Producer создать Message объект, поставив его на определенный Queue, и двигаясь вперед.
Там будет набор Consumers кто бы подписался на Queue в вопросе, и будет заботиться о обработке Message отправлено через. Обратите внимание, что в ходе этой сделки,Producers отделены от логики того, как данный Message будет обрабатываться.
Рамки обмена сообщениями (ActiveMQ и подобные) выступают в качестве основы для облегчения таких Message сделки путем предоставления MessageBroker s.

Я использовал его для отправки внутридневных сделок между различными системами управления фондами. Если вы хотите узнать больше о том, что такое отличная технология обмена сообщениями, я могу полностью рекомендовать книгу"Модели Интеграции Предприятия". Есть некоторые примеры JMS для таких вещей, как запрос/ответ и публикация/подписка.

обмен сообщениями является отличным инструментом для интеграции.

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

например, скажем, у вас есть дорогая и очень важная часть логики, такая как "купить вещи", важной частью покупки вещей будет "уведомить магазин вещей". Мы делаем вызов notify асинхронным, чтобы любая логика / обработка, которая участвует в вызове notify, не блокировала или не конкурировала с ресурсами с бизнес-логикой buy. Конечный результат, купить завершает, пользователь доволен, мы получаем наши деньги и потому что очередь гарантирована доставка магазин получает уведомление, как только он открывается или как только есть новый элемент в очереди.

Я использовал его для моего академического проекта, который был интернет-сайт розничной торговли, похожий на Amazon. JMS был использован для обработки следующих функций:

  1. уточните положение заказов помещенных клиентами, по мере того как пересылка перемещает от одного положения к другим. Это было сделано путем непрерывной отправки сообщений в очередь JMS.
  2. оповещение о любых необычных событиях, таких как задержка отправки, а затем отправка электронной почты клиенту.
  3. если доставка добрался до места назначения, отправив событие доставки.

У нас было несколько также реализованных удаленных клиентов, подключенных к главному серверу. Если соединение доступно, они используют для доступа к основной базе данных или если не используют свою собственную базу данных. Для обеспечения согласованности данных мы внедрили механизм 2PC. Для этого мы использовали JMS для обмена сообщениями между этими системами, т. е. один выступающий в качестве координатора, который инициирует процесс, отправляя сообщение в очередь, а другие будут ответьте соответствующим образом, отправив обратно сообщение в очередь. Как уже упоминалось, это было похоже на модель pub/sub.

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

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

мы использовали сообщения для создания онлайн-котировок

Apache Camel используется в сочетании с ActiveMQ это отличный способ сделать шаблоны интеграции предприятия

мы используем JMS для связи с системами в огромном количестве удаленных объектов по ненадежным сетям. Свободная связь в сочетании с надежными сообщениями создает стабильный ландшафт системы: каждое сообщение будет отправлено как только это технически возможно, большие проблемы в сети не будут иметь влияния на весь ландшафт системы...