2

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

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

使用 ActiveMQ 一切正常,我发送的消息可以在两个软件上读取和写入,此后我没有更改客户端。

现在,我从 c++ 软件(使用 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>

我还尝试在 tcp 和 ws 连接器中使用 <detect />,它应该自动检测客户端协议,但也不起作用。

有人可以帮我解决这个问题吗?

谢谢,


编辑 :

我发现我确实收到了 stomp 协议消息,但它们的格式非常奇怪,甚至包含使 stomp.js 无法解析消息并正确填充消息正文的非文本字符。

这是从 activemq openwire 和 apollo openwire 收到的相同消息,使用相同的 c++ 发布者和 js 订阅者:

活跃的MQ

    “信息
    消息 ID:ID:myID-61443-1352999572576-0:0:0:0:0
    类:Message.PointToPoint
    目的地:/主题/我的主题
    时间戳:1352999626186
    过期:0
    订阅:sub-0
    优先级:4

    <PointToPoint xmlns="Message" ><SourceId>u_23</SourceId><TargetId>u_75</TargetId></PointToPoint>"

阿波罗

    “信息
    订阅:sub-0
    目的地:
    内容长度:331
    内容类型:协议/openwire
    消息 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>(Message.PointToPoint 类
"

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

4

1 回答 1

2

ActiveMQ 5.6 处理将逻辑 OpenWire 消息转换为 STOMP 客户端的文本表示。Apollo,目前还不支持该功能!:( 看:

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

它只接收完整的 openwire 消息并将其用作 STOMP 消息的主体。顺便说一句,只要正确设置了内容长度标头,在 STOMP 消息中使用二进制数据是完全有效的。

于 2012-11-15T18:43:36.157 回答