提问者:小点点

ActiveMQ:转换OpenWire和STOMP消息


EDIT2:我这里的问题是由于对传输连接器在ActiveMQ中的工作方式理解不足引起的。太长别读了,ActiveMQ会隐式地在你的传输连接器配置之间"转换"或"中继"消息。

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

我正在创建一个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的信息——

在我的理解中,我正在尝试做的事情应该是可能的。其他用户会注意到,但不会注意到如何。例如,用户暗示我想要的东西在ActiveMQ中是可能的,但不Apollo:ActiveMQ到Apollo转换,Openwire到Stomp协议配置。

我希望(最好)需要使用类似ActiveMQ变压器的东西(例如,将变压器添加到连接器配置中:AMQP

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

…但是没有提到如何使用它,我不确定我是否能从中受益,如果这意味着没有用于OpenWire的变压器-

我想我可能误解了一些概念,“你走错了方向,改做这个”对我来说是一个很好的答案。在写这篇文章的时候,我想我将不得不使用他们的消息转换器接口(http://activemq.apache.org/message-transformation.html)创建一个ActiveMQ插件,尽管他们的子链接是404。我希望实现一个更简单的解决方案,例如现有的OpenWire-

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

共1个答案

匿名用户

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

如果不知道你遇到了什么问题,很难提供比这更深入的见解。在某些情况下,从Openwire到STOMP的转换可能不会给你带来完全正确的东西,比如MapMessage或StreamMessage,当然还有ObjectMessage,所以需要注意跨协议消息传递。

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