2013-08-28 295 views
3

我有这个应用程序使用mqtt-client java library通过mqtt连接到ActiveMQ代理。只要我的主题没有正斜杠(/),订阅,发布和接收邮件就可以正常工作。如何在mqtt主题中转义特殊字符(正斜杠)?

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

无论如何要在mqtt上寻找"/"?目前,如果我尝试连接到一个叫http://activemq.apache.org/话题,将在事实上连接到http:..activemq.apache.org.

+0

你无法逃避的“ /“在mqtt上,我不知道该怎么建议。 – ralight

+1

这确实需要熟悉activemq实现的人来回答。你的问题源于他们如何选择重写主题 - 似乎没有选择阻止它这样做。如果你在这里没有得到有用的回应,你应该尝试通过一个activemq支持渠道。 – knolleary

+0

@knolleary我检查了他们的[source](https://git-wip-us.apache.org/repos/asf?p=activemq.git;a=blob;f=activemq-mqtt/src/main/java/ org/apache/activemq/transport/mqtt/MQTTProtocolConverter.java; h = ac598e7c38825b88c233de52b5b81f205797f737; hb = a63a8320eabbe4e988b6d67eb6cf84aa0d294e0a),它们将“/”替换为“。”。你是否偶然地知道,如果按照mqtt标准,mqtt是否应该接受以“/”命名的主题?如果是这样的话,我可能会尝试推动经纪人来源的改变(或者自己改变它),否则我不应该试图说服它在这里不使用这样的主题名称 – Thomas

回答

2

我的建议。只有当你部署自己的ActiveMQ服务..

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

我在尝试使用MQTT时遇到了类似的问题,并且在主题中有'。'的 E.G.

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

这在当前实现改为

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

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

/帐号/ foobar的/用户/富/存储/会将myText/TXT

这不是我想要的东西,所以我不得不修改器逃离 '' 其结果是JMS toipc变成

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

其工作..

+0

这就是我实际完成的工作= D缺点是代码与主分支变得不同步,但因为它只是用于原型,所以这不是问题 – Thomas