是否可以将MQTT代理配置为不回显主题上的消息?

时间:2015-04-19 23:23:40

标签: mqtt

如果mqtt客户端发布并订阅某个主题,是否可以说服代理不要将客户端发送的消息回送给发布该消息的客户端?

例如,如果订阅并发布到主题" foo"有四个客户端(A,B,C,D),并且客户端A发布消息,我希望消息发送到客户B,C和D收到,但不回应客户A。

3 个答案:

答案 0 :(得分:1)

MQTT协议提供发布/订阅模式,因此您订阅的每个主题都会收到发送的消息。 MQTT代理实现尚未完全标准化:由于支持的功能不同,代理可能会有所不同。 直到今天,我还没有关注具有这种功能的经纪人。 当然可以实现,但这取决于经纪人开发人员。

保罗。

答案 1 :(得分:1)

MQTT protocol specifications部分 3.8 SUBSCRIBE - 订阅主题中,文档说(强调我的):

SUBSCRIBE数据包从客户端发送到服务器以创建一个或多个订阅。每个订阅都注册客户对一个或多个主题的兴趣。 服务器将PUBLISH数据包发送给客户端,以便将发布的应用程序消息转发到与这些订阅匹配的主题

所以你会收到回来的信息。我认为您可以对主题实施某种ACL以达到您期望的行为,但这将是特定于经纪人的 另一种解决方案是重新考虑您的主题结构。

答案 2 :(得分:1)

如前所述,您无法使用MQTT协议本身实现消息级别授权。

但是可以在某些特定的经纪人功能中实现这种功能。

例如,使用ActiveMQ,您可以使用方法isAllowedToConsume(ConnectionContext context, Message message)

将自己的类实现到MessageAuthorizationPolicy接口

在这里您可以看到RedHat Fuse ESB(使用ActiveMQ)的一个示例:MessageLevelAuth