3

我有这个应用程序使用mqtt-client java 库通过 mqtt 连接到 ActiveMQ 代理。只要我的主题没有正斜杠 (/),订阅、发布和接收消息就可以正常工作。

我知道正斜杠是 mqtt 中的特殊字符,并且根据activemq mqtt 支持"/"将转换为".". 但是,就我而言,我需要连接到使用 JMS 创建的主题,这些主题写为 uri(例如http://activemq.apache.org/),因此它们的名称上将带有“/”。

反正有没有"/"在 mqtt 上逃避?目前,如果我尝试连接到一个名为http://activemq.apache.org/它的主题,它实际上会连接到http:..activemq.apache.org.

4

1 回答 1

2

我的建议.. 仅在您部署自己的 ActiveMQ 服务时才有效..

下载 ActiveMQ 源代码。转换发生在模块 MQTTProtocolConverter 中。在那里你会看到特殊的转换。代码在 5.10.0 中发生了变化,但不用说你可以在那里逃避一些东西,它应该可以工作。我修改了来自 MQTT 的入站请求和出站请求的代码。

我在尝试使用 MQTT 时遇到了类似的问题,并且在主题中有“。”的 EG

MQTT 主题是 /accounts/foobar/users/foo/storage/myText.txt

这在当前实现中更改为

.accounts.foobar.users.foo.storage.myText.txt

然后当从 MQTT 插件接收到消息时,将主题转换为

/accounts/foobar/users/foo/storage/myText/txt

这不是我想要的,所以我不得不修改 Converter 以逃避 '.' 结果是JMS toipc变成了

.accounts.foobar.users.foo.storage.myText\.txt

哪个有效..

于 2014-07-10T16:53:20.463 回答