Для чего нужна служба сообщений Java (JMS)? - PullRequest
32 голосов
/ 10 июня 2010

Я сейчас оцениваю JMS и не понимаю, для чего я мог бы его использовать.

В настоящее время я считаю, что это будет вариант использования: я хочу создать SalesInvoice PDF и распечатать его, когда SalesOrder покидает склад, поэтому во время транзакции Delivery я мог бы отправить запрос на транзакционную печать, который начинается только тогда, когдаТранзакция SalesOrder успешно завершена.

Теперь я обнаружил, что большинство продуктов JMS являются автономными серверами.

  • Зачем нужен автономный сервер для обработки сообщений, а, например, какая-то простая обработка inproc с планировщиком Quartz?
  • Как это взаимодействует с моим приложением?
  • Разве это не слишком медленно?
  • Какие варианты использования вы уже успешно реализовали?

Ответы [ 8 ]

44 голосов
/ 10 июня 2010

JMS - удивительно полезная система, но не для всех целей.

По сути, это высокоуровневая структура для отправки сообщений между узлами с опциями обнаружения, надежности и т. Д.

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

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

Сценарий, который вы описываете, звучит как классическая проблема J2EE, почему вы не используете инфраструктуру J2EE? JMS часто используется внутри J2EE для связи, но у вас есть все остальные преимущества.

17 голосов
/ 10 июня 2010

Что такое Java Message Service (JMS) для

JMS - это стандарт обмена сообщениями , который позволяет приложениям Java EE создавать, отправлять, получать и использовать сообщенияслабосвязанным, надежным и асинхронным способом.Я бы посоветовал прочитать Обзор API службы сообщений Java для получения более подробной информации.

Зачем нужен автономный сервер для обработки сообщений, а, например, какая-то простая обработка inproc с планировщиком Quartz?

Конечно, в вашем случае, Quartz это вариант.Но что, если система счетов-фактур является удаленной системой?Что делать, если вы не хотите ждать ответа?Что делать, если удаленная система не работает, когда вы хотите с ней связаться?Что делать, если сеть не всегда доступна?Именно здесь приходит JMS. JMS позволяет отправлять сообщение, гарантированно доставленное, и использовать его транзакционным способом (отправка или использование сообщения может быть частью глобальной транзакции).

Какэто взаимодействует с моим приложением?

JMS поддерживает два режима связи: двухточечный и публикация / подписка (если это отвечает на вопрос).

Не слишком ли это медленно?

МОМы, с которыми я работал, работали очень быстро.

Какие варианты использования вы уже успешно реализовали?

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

См. также

5 голосов
/ 10 июня 2010

Зачем нужен автономный сервер для обработки сообщений, в отличие, например, от простой обработки внутри процессора с помощью планировщика Quartz?

Сила JMS заключается в том, что вы можете иметь несколько производителей и несколько потребителей для одной и той же очереди, а JMS-брокер управляет загрузкой.

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

Остальные пункты просто слишкомнеопределенный ответ.

3 голосов
/ 10 июня 2010

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

http://coders -log.blogspot.com / 2008/12 / любимые-проекты серии, рассрочка-2.html

В описании объясняется, что JMS принесла в таблицу для этого конкретного проекта, но другие проекты будут использовать системы обмена сообщениями по ряду причин.

1 голос
/ 24 мая 2017

Из Javadoc :

API Java Message Service (JMS) предоставляет общий способ для программ Java создавать, отправлять, получать и читать сообщения системы обмена сообщениями предприятия.

Другими словами, и в отличие от любого другого ответа здесь, JMS является не чем иным, как API, , который обертывает доступ к сторонним брокерам сообщений через «провайдеров JMS», реализованных поставщиком.Те Message Brokers , как IBM MQ и десятки других, обладают функциями надежности, асинхронности и т. Д., Которые были упомянуты в других ответах.Сам JMS не предоставляет ни одного из них.Для Message Brokers именно JDBC является базой данных SQL, а JNDI - для серверов LDAP (среди прочего).

1 голос
/ 10 июня 2010

Сообщения обычно используются для соединения различных систем и асинхронной отправки запросов / команд.Типичным примером является клиентское приложение банка, запрашивающее подтверждение транзакции.Сервер находится в системе другого банка.Обе системы подключены к корпоративной сервисной шине.Запрос поступает в шину обмена сообщениями, которая мгновенно подтверждает получение сообщения.Клиент может продолжить обработку.Всякий раз, когда серверная система становится доступной, шина пересылает сообщение ей.Конечно, должен быть второй путь, чтобы сервер сообщал клиенту, что транзакция выполнена успешно или не удалась.Это снова может быть реализовано с помощью JMS.

Обратите внимание, что двум системам не нужно реализовывать JMS.Один может использовать JMS, а другой - MSMQ.Автобус позаботится о взаимосвязи.

1 голос
/ 10 июня 2010

JMS - это промежуточное ПО, ориентированное на сообщения .

  • Зачем нужен отдельный сервер для обработки сообщений, например, какая-нибудь простая обработка inproc с планировщиком Quartz?

Это зависит от того, какие другие компоненты вы можете иметь. Похоже. Но я ничего не знаю о Кварце

  • Как это взаимодействует с моим приложением?

Вы отправляете сообщения брокеру.

  • Разве это не слишком медленно?

Сравните с чем?

  • Какие варианты использования вы уже успешно реализовали?

Я использовал JMS для реализации сервера приложений SIP, для связи между различными компонентами.

0 голосов
/ 23 июля 2015

Я нашел очень хорошее объяснение JMS на примере.

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

В этом примере реализации они использовали

  • XSD для генерации классов домена.
  • Eclipse EE в качестве IDE.
  • JBoss в качестве веб-приложения / приложениясервер.
  • HTML / JavaScript / JQuery для пользовательского интерфейса.
  • Сервлет в качестве контроллера.
  • MySQL в качестве БД.

Шаг настройки JBoss дляОчередь хорошо объяснена. Ее можно получить по http://coder2design.com/messaging-service/

. Здесь также доступен загружаемый код.

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