ActiveMQ到Apollo过渡,Openwire到Stomp协议配置

时间:2012-11-15 16:00:18

标签: activemq messagebroker apollo

我正在尝试从ActiveMQ 5.6切换到Apollo 1.5。 我有两个软件正在交换消息,使用主题上的发布/订阅。

  • 第一个是c ++并使用openwire with tcp
  • 第二个是Javascript并使用带有websockets的stomp

使用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
"

你认为这可能是阿波罗的问题吗?

1 个答案:

答案 0 :(得分:2)

ActiveMQ 5.6处理将逻辑OpenWire消息转换为STOMP客户端的文本表示。阿波罗目前还不支持这项功能! :(见:

https://issues.apache.org/jira/browse/APLO-267

它只需要完整的openwire消息并将其用作STOMP消息的主体。只要正确设置了内容长度标题,在STOMP消息中使用二进制数据的BTW就完全有效。