2013-08-28 298 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