ActiveMQ:转换 OpenWire 和 STOMP 消息

ActiveMQ: Transforming OpenWire and STOMP messages

EDIT2:我这里的问题是由于对传输连接器在 ActiveMQ 中的工作方式了解不足造成的。 TL;DR 是 ActiveMQ 将在 activemq.xml.

中定义的传输连接器配置之间隐式 "transform" 或 "relay" 消息

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

我正在创建一个 Angular 应用程序(最好是网站,避免使用本机应用程序),objective 通过 ActiveMQ 服务器上的网络套接字 "tap in" 并订阅 OpenWire 消息.我如何让 ActiveMQ 将 OpenWire 消息转换为 STOMP 消息并将这些消息发送到连接到 ActiveMQ WebSocket 连接器的任何客户端(即我的 Angular 应用程序)? 另外,如果我能把STOMP也转换成OpenWire就好了。

以我的理解,我正在尝试做的事情应该是可能的。其他用户注意到了,但没有注意到。例如。用户暗示我想要的东西在 ActiveMQ 中是可能的,但在 Apollo 中是不可能的:ActiveMQ to Apollo transition, Openwire to Stomp protocol configuration.

我希望(最好)需要使用类似 ActiveMQ 转换器的东西(例如,将转换器添加到连接器配置:AMQP & Openwire - Activemq broker and 2 different consumers) or maybe writing an ActiveMQ plugin (http://activemq.apache.org/developing-plugins.html). On ActiveMQ's website, an existing transformer is mentioned (http://activemq.apache.org/stomp.html 消息转换部分):

Currently, ActiveMQ comes with a transformer that can transform XML/JSON text to Java objects

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

我想我可能误解了一些概念,"you're going in a wrong direction, do this instead" 对我来说是一个很好的答案。在撰写本文时,我预计我将不得不使用他们的 Message Transformer 接口 (http://activemq.apache.org/message-transformation.html) 创建一个 ActiveMQ 插件,尽管他们的子链接是 404。我希望实现一个更简单的解决方案,例如一个现有的 OpenWire-->STOMP 转换器:

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

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

在不了解您遇到的问题的情况下,很难提供比这更深入的见解。在某些情况下,从 Openwire 到 STOMP 的转换可能不会为您产生完全正确的东西,例如 MapMessage 或 StreamMessage,当然还有 ObjectMessage,因此需要注意跨协议消息传递。

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