2015-04-19 12 views
2

如果一個mqtt客戶端發佈並訂閱了一個主題,是否可以說服該代理不迴應客戶端發回的消息回發佈消息的客戶端?MQTT代理可以配置爲不回顯主題上的消息嗎?

例如,如果有四個客戶(A,B,C,D)訂閱併發布到話題「foo」,並且客戶A發佈消息,我希望消息被客戶接收B,C和D,但不回顯給客戶端A.

回答

0

MQTT協議提供了發佈/訂閱模式,因此您訂閱的每個主題都會收到發送的消息。 MQTT代理實施沒有完全標準化:由於支持的功能不同,代理可能會有所不同。 直到今天,我並沒有介紹一個具有這種特徵的經紀人。 當然可以實現,但它取決於經紀人開發人員。

Paolo。

0

MQTT protocol specifications,部分3.8訂閱 - 訂閱主題,文件說(重點煤礦):

的訂閱包從客戶端發送到服務器創建一個或多個訂閱。每次訂閱都會記錄客戶對一個或多個主題的興趣。 服務器向客戶端發送PUBLISH數據包,以便將已發佈的應用消息轉發到符合這些訂閱的主題

所以你會收到數據包。我認爲你可以在主題上實現某種ACL來達到你想要的行爲,但這將是特定的經紀人。
另一個解決方案是重新考慮你的話題結構。

1

如前所述,您無法使用MQTT協議本身實現消息級別授權。

但是有可能在某些特定經紀人的功能中實現這種功能。

例如和ActiveMQ你可以實現你自己的類與方法isAllowedToConsume(ConnectionContext context, Message message)

這裏的界面MessageAuthorizationPolicy你可以看到RedHat的保險絲ESB(使用ActiveMQ的)的一個例子:MessageLevelAuth

相關問題