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

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

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

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

  • Почему был бы потребность Автономный сервер для Обработки сообщения, по сравнению с, например, некоторого простого inproc, обрабатывающего с Кварцевым планировщиком?
  • Как это взаимодействует с моим приложением?
  • Разве это не слишком медленно?
  • Что такое Варианты использования, которые Вы уже реализовали успешно?
32
задан Mark 10 June 2010 в 14:27
поделиться

6 ответов

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

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

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

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

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

45
ответ дан 27 November 2019 в 20:18
поделиться

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

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

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

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

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

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

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

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

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

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

См. Также

17
ответ дан 27 November 2019 в 20:18
поделиться

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

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

1
ответ дан 27 November 2019 в 20:18
поделиться

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

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

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

3
ответ дан 27 November 2019 в 20:18
поделиться

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

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

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

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

5
ответ дан 27 November 2019 в 20:18
поделиться

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

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

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

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

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

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

По сравнению с чем?

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

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

1
ответ дан 27 November 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: