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

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

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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