ActiveMQ: преобразование сообщений OpenWire и STOMP - PullRequest
0 голосов
/ 27 марта 2019

EDIT2 : Моя проблема здесь была вызвана недостаточным пониманием того, как транспортные соединители работают в ActiveMQ. TL; DR означает, что ActiveMQ будет неявно «преобразовывать» или «ретранслировать» сообщения между конфигурациями вашего транспортного соединителя, определенными в activemq.xml.

EDIT : Дополнительная информация, сообщения STOMP, полученные приложением Angular, используются для отладки и демонстрации. Следовательно, достаточно просто преобразовать сообщение OpenWire в блок читаемого текста.

Я создаю приложение Angular (предпочтительно веб-сайт, избегая нативных приложений), цель которого - «подключиться» через веб-сокеты на сервере ActiveMQ и подписаться на сообщения OpenWire. Как я могу позволить ActiveMQ преобразовывать сообщения OpenWire в сообщения STOMP и отправлять их любым клиентам (например, моему приложению Angular), подключенным к разъему ActiveMQ WebSocket? Кроме того, было бы неплохо иметь возможность преобразовать STOMP в OpenWire.

  • Это должно быть Angular
  • Избегать использования собственных приложений на стороне клиента предпочтительнее, но не нарушает договоренности.
  • Добавление дополнительной нагрузки на сервер ActiveMQ следует выполнять с осторожностью.
  • Насколько я знаю, Angular может "напрямую общаться" с сервером ActiveMQ только с помощью сообщений STOMP, отправляемых через веб-сокет, если я не хочу использовать собственные приложения.
  • У меня уже есть приложение Angular, способное к STOMP-связи через веб-сокеты (например, что-то вроде https://github.com/stomp-js/ng2-stompjs-angular7).
  • Мне не хватает информации о том, как настроить сервер ActiveMQ для преобразования OpenWire -> STOMP через его транспортные разъемы.

В моем понимании, то, что я пытаюсь сделать, должно быть возможным. Это отмечают другие пользователи, но не как. Например. пользователи намекают, что то, что я хочу, возможно в ActiveMQ, но не в Apollo: переход с ActiveMQ на Apollo, конфигурация протокола Openwire на Stomp .

Я ожидаю (предпочтительно) необходимость использовать что-то вроде преобразователя ActiveMQ (например, добавление преобразователя в конфигурацию соединителя: AMQP & Openwire - брокер Activemq и 2 разных потребителя ) или, возможно, написание плагина ActiveMQ ( http://activemq.apache.org/developing-plugins.html). На веб-сайте ActiveMQ упоминается существующий преобразователь (http://activemq.apache.org/stomp.html Раздел «Преобразования сообщений»):

В настоящее время ActiveMQ поставляется с преобразователем, который может преобразовывать текст XML / JSON в объекты Java

... но нет упоминания о том, как это использовать, и я не уверен, смогу ли я извлечь из этого пользу, и означает ли это, что для OpenWire -> STOMP или наоборот нет преобразователей.

Полагаю, что я мог неправильно понять некоторые концепции, и «хороший ответ - вы идете в неверном направлении» может послужить хорошим ответом для меня. На момент написания статьи я ожидал, что мне придется создать плагин ActiveMQ, используя их интерфейс Message Transformer (http://activemq.apache.org/message-transformation.html), хотя их подлинки 404. Я надеюсь найти более простое решение, например, существующее OpenWire-- > STOMP трансформатор:

<transportConnector name="openwire" uri="{some-openwire-uri}?transport.transformer=stomp"/>

1 Ответ

1 голос
/ 27 марта 2019

ActiveMQ будет «преобразовывать» любое сообщение Openwire в сообщение STOMP и наоборот по мере необходимости на основе клиентских подключений.Если клиент JMS на основе Openwire подключается и помещает сообщение в очередь, а клиент на основе STOMP приходит и подписывается на эту очередь, сообщение будет преобразовано в сообщение STOMP для отправки этому клиенту.

Не зная больше о том, что у вас есть проблема, трудно представить более глубокое понимание, чем это.В некоторых случаях преобразование из Openwire в STOMP может оказаться не совсем подходящим для вас, например, MapMessage или StreamMessage и, безусловно, ObjectMessage, поэтому необходимо соблюдать осторожность при обмене сообщениями между протоколами.

Вам, конечно, нужно добавить транспортный соединитель для каждого из протоколов, которые вы хотите поддерживать, Openwire, STOMP, AMQP и т. Д. Клиентам нужно что-то для подключения, а затем, когда они подключаются, брокер обрабатывает сообщение.преобразования среди подписок на темы и очереди.

...