Подтвердить что ты не робот

Для чего предназначена служба сообщений Java (JMS)?

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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

Что такое служба сообщений Java (JMS) для

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

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

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

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

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

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

Мамочки, с которыми я работал, быстро пылали.

Что вы успешно реализовали с помощью Usecases?

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

См. также

Ответ 3

JMS используется для слабосвязанной и асинхронной связи.

Что такое слабосвязанная и асинхронная связь?

Компонент отправляет сообщение получателю, и получатель может получить сообщение от адресата. Тем не менее, отправитель и получатель не должны быть доступны одновременно, чтобы общаться. Фактически, отправителю не нужно ничего знать о получателе; и получателю не нужно ничего знать о отправителе. Отправитель и получатель должны знать только, какой формат сообщения и какой пункт назначения использовать. В этом отношении обмен сообщениями отличается от тесно связанных технологий, таких как Remote Method Invocation (RMI), которые требуют от приложения знать методы удаленных приложений.

Домены сообщений

Существует 2 типа домена обмена сообщениями

  • Обмен сообщениями "точка-точка"
  • Публикация/Подписка на сообщения

Точечный обмен сообщениями

Продукт или приложение "точка-точка" (PTP) построено на концепции очередей сообщений, отправителей и получателей. Каждое сообщение направляется в определенную очередь, а получающие клиенты извлекают сообщения из очередей, установленных для хранения своих сообщений. Очереди сохраняют все сообщения, отправленные им до тех пор, пока сообщения не будут уничтожены или не истечет.
• Каждое сообщение имеет только одного пользователя.
• Отправитель и получатель сообщения не имеют временных зависимостей. Получатель может получить сообщение о том, выполнялся ли он, когда клиент отправил сообщение.
• Приемник подтверждает успешную обработку сообщения.
enter image description here

Опубликовать/Подписать домен сообщений

В продукте или приложении публикации/подписки (pub/sub) клиенты направляют сообщения в тему, которая функционирует как доска объявлений. Издатели и подписчики обычно анонимны и могут динамически публиковать или подписываться на иерархию контента. Система заботится о распространении сообщений, поступающих из нескольких издателей тем, в число своих подписчиков. Темы сохраняют сообщения только до тех пор, пока они не распространяются на текущих подписчиков.
Паб/вспомогательная передача сообщений имеет следующие характеристики.
• Каждое сообщение может иметь несколько пользователей.
• У издателей и подписчиков есть зависимость от времени. Клиент, который подписывается на тему, может использовать только сообщения, опубликованные после того, как клиент создал подписку, и абонент должен продолжать быть активным, чтобы он мог использовать сообщения.

enter image description here

Ответ 4

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

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

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

Другие пункты слишком расплывчаты, чтобы их можно было ответить.

Ответ 5

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

http://coders-log.blogspot.com/2008/12/favorite-projects-series-installment-2.html

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

Ответ 6

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

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

Ответ 7

JMS является ориентированным на сообщения промежуточным программным обеспечением.

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

Это зависит от того, какие другие компоненты у вас есть. Я полагаю. Но я ничего не знаю о Quartz

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

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

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

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

  • Что вы успешно реализовали с помощью Usecases?

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

Ответ 8

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

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

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

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

Шаг конфигурации JBoss для очереди объясняется красиво Его доступный по адресу http://coder2design.com/messaging-service/

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

Ответ 9

Из Javadoc:

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

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