ActiveMQ:转换OpenWire和STOMP消息

时间:2019-03-27 13:08:03

标签: activemq stomp

EDIT2 :我的问题是由于对传输连接器在ActiveMQ中的工作方式了解不足而引起的。 TL; DR是ActiveMQ会在activemq.xml中定义的传输连接器配置之间隐式“转换”或“中继”消息。

编辑:Angular应用程序收到的STOMP消息等附加信息用于调试和演示目的。因此,只需将OpenWire消息转换为可读文本即可。

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

  • 它必须是Angular
  • 最好避免在客户端使用本机应用程序,尽管这不会破坏交易。
  • 在ActiveMQ服务器上增加额外的处理压力必须谨慎。
  • 据我所知,如果我避免使用本机应用程序,则只能通过Web套接字发送的STOMP消息让Angular与ActiveMQ服务器“直接对话”。
  • 我已经有一个能够通过Web套接字进行STOMP通信的Angular应用程序(例如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“消息转换”部分):

  

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

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

我希望我可能会误解了一些概念,并且“您朝错误的方向前进,而改为这样做”可以为我提供一个很好的答案。在撰写本文时,尽管它们的子链接为404,我希望我将不得不使用其Message Transformer接口(http://activemq.apache.org/message-transformation.html)创建一个ActiveMQ插件。我希望实现一个更简单的解决方案,例如现有的OpenWire-> STOMP转换器:

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

1 个答案:

答案 0 :(得分:1)

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

尽管不了解您所遇到的问题,但是很难提供更多的见解。在某些情况下,从Openwire到STOMP的转换可能无法为您提供完全正确的东西,例如MapMessage或StreamMessage以及绝对是ObjectMessage,因此需要注意跨协议消息传递。

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