我正在尝试从ActiveMQ 5.6切换到Apollo 1.5。 我有两个软件正在交换消息,使用主题上的发布/订阅。
使用ActiveMQ一切正常,我发送的消息可以在两个软件上读写,而且我之后没有更改客户端。
现在,我从c ++ soft发送消息(使用openwire),并尝试用JS软件读取它们,我得到错误。事实上,我收到带有标题内容类型的消息:“protocol / openwire”,但我希望stomp。
这是我配置apollo.xml连接器部分的方式:
<connector id="tcp" bind="tcp://0.0.0.0:61613">
<openwire max_inactivity_duration="-1" max_inactivity_duration_delay="-1" />
<stomp max_header_length="10000" die_delay="-1" />
</connector>
<connector id="ws" bind="tcp://0.0.0.0:61623">
<stomp max_header_length="10000" die_delay="-1" />
</connector>
我也试过&lt; detect /&gt;在tcp和ws连接器中,应该自动检测客户端协议,但也不能正常工作。
有人可以帮我解决这个问题吗?
谢谢,
编辑:
我发现我确实收到了stomp协议消息,但它们非常奇怪,甚至包含非文本字符,这使得stomp.js无法解析消息并正确填充消息体。
这里是从activemq openwire收到的同一个消息,然后apollo openwire与同一个c ++发布者和js订阅者:
的ActiveMQ
"MESSAGE message-id:ID:myID-61443-1352999572576-0:0:0:0:0 class:Message.PointToPoint destination:/topic/my-topic timestamp:1352999626186 expires:0 subscription:sub-0 priority:4 <PointToPoint xmlns="Message" ><SourceId>u_23</SourceId><TargetId>u_75</TargetId></PointToPoint>"
阿波罗
"MESSAGE subscription:sub-0 destination: content-length:331 content-type:protocol/openwire message-id:xps-broker-291 Eç{#ID:myID-61463-1352999939140-0:0emy-topicn{#ID:myID-61463-1352999939140-0:0; Å??<PointToPoint xmlns="Message" ><SourceId>u_23</SourceId><TargetId>u_75</TargetId></PointToPoint>(class Message.PointToPoint "
你认为这可能是阿波罗的问题吗?
答案 0 :(得分:2)
ActiveMQ 5.6处理将逻辑OpenWire消息转换为STOMP客户端的文本表示。阿波罗目前还不支持这项功能! :(见:
https://issues.apache.org/jira/browse/APLO-267
它只需要完整的openwire消息并将其用作STOMP消息的主体。只要正确设置了内容长度标题,在STOMP消息中使用二进制数据的BTW就完全有效。