ActiveMQ:转换OpenWire和STOMP消息

问题描述 投票:0回答:1

EDIT2:我的问题是由于对传输连接器在ActiveMQ中的工作原理认识不足造成的。 TL; DR是ActiveMQ将在activemq.xml中定义的传输连接器配置之间隐式“转换”或“中继”消息。

编辑:附加信息,Angular应用程序收到的STOMP消息用于调试和演示目的。因此,简单地将OpenWire消息转换为可读文本的blob就足够了。

我正在创建一个Angular应用程序(最好是网站,避免本机应用程序),其目标是通过ActiveMQ服务器上的Web套接字“点击”并订阅OpenWire消息。如何让ActiveMQ将OpenWire消息转换为STOMP消息并将其发送到连接到ActiveMQ WebSocket连接器的任何客户端(即我的Angular应用程序)?另外,如果我可以将STOMP转换为OpenWire,那将是很好的选择。

  • 它必须是Angular
  • 尽管不是交易破坏者,但最好避免在客户端使用本机应用程序。
  • 必须谨慎地在ActiveMQ服务器上添加额外的处理压力。
  • 据我所知,如果我要避免使用本机应用程序,只能让Angular通过Web套接字发送的STOMP消息与ActiveMQ服务器“直接对话”。
  • 我已经有一个Angular应用程序能够通过Web套接字进行STOMP通信(例如https://github.com/stomp-js/ng2-stompjs-angular7之类的东西)。
  • 我缺少有关如何配置ActiveMQ服务器以通过其传输连接器转换OpenWire - > STOMP的信息。

根据我的理解,我想做的事情应该是可能的。其他用户注意到,但不是如何。例如。用户暗示我想要的是ActiveMQ而不是Apollo:ActiveMQ to Apollo transition, Openwire to Stomp protocol configuration

我希望(最好)需要使用类似ActiveMQ变换器的东西(例如将变换器添加到连接器配置:AMQP & Openwire - Activemq broker and 2 different consumers)或者编写ActiveMQ插件(http://activemq.apache.org/developing-plugins.html)。在ActiveMQ的网站上,提到了一个现有的变换器(http://activemq.apache.org/stomp.html Message Transformations部分):

目前,ActiveMQ附带了一个转换器,可以将XML / JSON文本转换为Java对象

...但没有提到如何使用这个,我不确定我是否可以从中受益,如果这意味着OpenWire没有变换器 - > STOMP,反之亦然。

我希望我可能误解了一些概念,并且“你走向错误的方向,而不是这样做”对我来说可以成为一个好的答案。在撰写本文时,我预计我将不得不使用他们的Message Transformer接口(http://activemq.apache.org/message-transformation.html)创建一个ActiveMQ插件,尽管它们的子链接是404.我希望能够实现一个更简单的解决方案,例如现有的OpenWire - > STOMP变换器:

<transportConnector name="openwire" uri="{some-openwire-uri}?transport.transformer=stomp"/>
activemq stomp
1个回答
1
投票

ActiveMQ将根据客户端连接将任何Openwire消息“转换”为STOMP消息,反之亦然。我是基于Openwire的JMS客户端连接并将消息放入队列,并且基于STOMP的客户端出现并订阅该队列,消息将被转换为STOMP消息以发送到该客户端。

如果不了解您所遇到的问题,就很难提供更多的洞察力。在某些情况下,从Openwire到STOMP的转换可能无法为您提供完全正确的东西,例如MapMessage或StreamMessage,并且肯定是ObjectMessage,因此需要对交叉协议消息传递采取一些谨慎措施。

您当然需要为您要支持的每个协议添加传输连接器,Openwire,STOMP,AMQP等。客户端需要连接的东西,然后一旦连接代理管理主题和订阅上的订阅之间的消息转换队列。

© www.soinside.com 2019 - 2024. All rights reserved.