【问题标题】:How to escape a special character (forward slash) in a mqtt topic?如何在 mqtt 主题中转义特殊字符(正斜杠)?
【发布时间】:2014-07-11 02:14:06
【问题描述】:

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

我了解正斜杠是 mqtt 中的特殊字符,根据activemq mqtt support"/" 将转换为"."。但是,在我的例子中,我需要连接到使用 JMS 创建的主题,这些主题写为 uri(例如 http://activemq.apache.org/),因此名称上会带有“/”。

有没有办法在 mqtt 上对"/" 进行转义?目前,如果我尝试连接到一个名为 http://activemq.apache.org/ 的主题,它实际上会连接到 http:..activemq.apache.org.

【问题讨论】:

  • mqtt 上的“/”是逃不掉的,不知道该建议什么。
  • 这确实需要熟悉activemq实现的人来回答。您的问题源于他们如何选择重写主题 - 似乎没有选择阻止它这样做。如果您在这里没有得到有用的回复,您应该通过 activemq 支持渠道之一尝试。
  • @knolleary 我检查了他们的source,他们将“/”替换为“.”。您是否偶然知道根据 mqtt 标准,mqtt 是否应该接受带有“/”的主题以某种方式在其名称上转义?如果是这样,我可能会尝试在代理源中推送更改(或自己更改),否则我不应该在这里尝试说服它不要使用这样的主题名称
  • @Thomas 不,在 MQTT 中没有转义 / 的概念 - 这表明使用 ActiveMQ 不可能从 MQTT 客户端订阅包含 / 的 JMS 创建的主题。这似乎是一个很大的限制,因此值得跟进。

标签: activemq mqtt


【解决方案1】:

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

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

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

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

哪个有效..

【讨论】:

  • 其实我就是这么干的 =D >
猜你喜欢
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多