EDIT2:我这里的问题是由于对传输连接器在ActiveMQ中的工作方式理解不足引起的。太长别读了,ActiveMQ会隐式地在你的传输连接器配置之间"转换"或"中继"消息。
编辑:附加信息,Angular应用程序收到的STOMP消息用于调试和演示目的。因此,简单地将OpenWire消息转换为可读文本的blob就足够了。
我正在创建一个Angular应用程序(最好是网站,避免本地应用程序),其目标是通过ActiveMQ服务器上的Web套接字“点击”并订阅OpenWire消息。我如何让ActiveMQ将OpenWire消息转换为STOMP消息并将这些消息发送到连接到ActiveMQ WebSocket连接器的任何客户端(即我的Angular应用程序)?此外,如果我也能将STOMP转换为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"/>
ActiveMQ将根据客户端连接的需要将任何Openwire消息“转换”为STOMP消息,反之亦然。如果基于Openwire的JMS客户端连接并将消息放置到队列中,并且基于STOMP的客户端出现并订阅该队列,则消息将被转换为STOMP消息发送到该客户端。
如果不知道你遇到了什么问题,很难提供比这更深入的见解。在某些情况下,从Openwire到STOMP的转换可能不会给你带来完全正确的东西,比如MapMessage或StreamMessage,当然还有ObjectMessage,所以需要注意跨协议消息传递。
您当然需要为您想要支持的每个协议添加一个传输连接器,Openwire、STOMP、AMQP等。客户端需要连接一些东西,然后一旦它们连接起来,代理就会管理主题和队列订阅之间的消息转换。