2017-03-02 66 views
1

我正在使用mosquitto作爲我的MQTT代理。 我想知道是否可以請求所有已發佈的主題?請求所有已發佈主題

因此不通過訂閱所有內容,即'#'。

編輯:我不想訂閱每個可用的主題。我只是在尋找一種方法來檢索所有已發佈的主題。例如,代理可以使用包含所有已發佈主題的字符串數組進行響應。

+0

究竟是什麼你想在這裏實現什麼?訂閱一個龐大的主題列表會導致代理商產生更多的開銷(因爲它必須檢查列表中的所有內容),而不是僅僅檢查匹配所有內容的「#」。 – hardillb

+0

我不是說我想訂閱一切。我只是想要請求所有已發佈的主題。例如,代理可以使用包含所有已發佈主題的字符串數組進行響應。我編輯了我的問題以更好地反映我的意圖。 – gillesC

回答

2

MQTT經紀人的可管理性在這一點上是非常不成熟的。 我也不知道如何從任何經紀商檢索已發佈主題的列表。 但是,有標準化的努力,例如。與$ SYS主題樹https://github.com/mqtt/mqtt.github.io/wiki/SYS-Topics

其他經紀人可以通過SNMP進行管理,例如: MessageSight https://www.ibm.com/support/knowledgecenter/en/SSCGGQ_1.2.0/com.ibm.ism.doc/Monitoring/admin00008_.html。它可以在其WEB界面中列出主題,但我不知道用於檢索它們的編程方式。

0

簡短答案是否定的,經紀人不需要保留主題消息已發佈的列表,它只是檢查消息到達時每個客戶端訂閱的主題列表。

此外,如果它沒有保持這樣一份名單,你會如何決定何時從列表中刪除一個主題,一個消息可能永遠只能發送一次到特定的主題,你會保留名單上的話題永遠不會消失?

+0

活動主題的存儲可以通過最大存儲時間等進行配置。 – gillesC

1

如果發送「EVERY」消息,經紀商保留消息= true,則您可以:

  1. 連接到服務器訂閱「#」
  2. 檢查所有保留的消息和他們的話題(除這些發表主題)
  3. 退訂「#」
  4. 訂閱每個話題你有