2009-06-24 2 views

ответ

152

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

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

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

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

+0

Привет, @ jon, вы видели этот тег Документации? https://stackoverflow.com/documentation/jms/commit им просто нужна одна поддержка коммиттера, чтобы включить тему, я думаю, что вы можете быть тем, кто дает им возможность дать нам потрясающие документы на JMS – juanmf

+0

@ Как я понимаю jms сама по себе является реализацией шаблона интеграции предприятия? – valik

+0

Нет, Мул или Верблюд ... – Jon

80

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

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

+34

После прочтения вашего ответа я собираюсь добавить JMS в свою очередь «Что я буду изучать в этом году» :) – Roman

+0

В наши дни вместо использования спецификации JMS мы можем использовать асинхронные вызовы методов. Для получения дополнительной информации см. Https://docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html – geo

+0

Они не совсем то же самое. Нет гарантированной доставки с вызовом метода асинхронного вызова; нет понятия тем, которые могут сразу отправить нескольким слушателям. – duffymo

14

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

+0

Я хочу асинхронную обработку, потому что RestService Api синхронно. Как это сделать с помощью ActiveMq и Jms.Пожалуйста, помогите в этом. http://stackoverflow.com/questions/19706788/jersey-rest-web-service-with-activemq-middleware-integration. Спасибо за вашу помощь и время. – Kumar

3

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

63

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

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

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

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

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

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

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

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

8

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

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

+1

Пожалуйста, помогите нам в этом. http://stackoverflow.com/questions/19706788/jersey-rest-web-service-with-activemq-middleware-integration. Спасибо за вашу помощь и время. – Kumar

+1

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

6

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

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

9

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

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

3

Apache Camel используется в сочетании с ActiveMQ является отличным способом, чтобы сделать Enterprise Integration Patterns

2

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

6

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

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

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

Смежные вопросы