将重复消息发送到网桥

时间:2017-03-08 13:01:32

标签: mqtt mosquitto

我可以阻止发送到桥接的重复邮件吗? 我已经从客户端设置了重复标记,但代理仍然发送带有dup = 0的新消息。

消息m870被发送两次,因为客户端第一次没有收到PUBACK(可能是某些互联网在中间断开)。客户端重新发送m870,其中dup = 1,但是服务器仍然将消息发送到具有dup = 0的代理。(这使得其他代理连接到网桥认为此消息是新的,并发布到所有订阅的客户端。)

1488965834: Received PUBLISH from client (d0, q1, r0, m870, 'test/topic', ... (10 bytes))
1488965834: Sending PUBACK to client (Mid: 870)
1488965834: Sending PUBLISH to bridge (d0, q1, r0, m58118, 'B/test/topic', ... (10 bytes))
1488965834: Received PUBACK from bridge (Mid: 58118)
1488965838: Received PUBLISH from client (d1, q1, r0, m870, 'test/topic', ... (10 bytes))
1488965838: Sending PUBACK to client (Mid: 870)
1488965838: Sending PUBLISH to bridge (d0, q1, r0, m58121, 'B/test/topic', ... (10 bytes))
1488965838: Received PUBACK from bridge (Mid: 58121)

此问题也发布到mosquitto/issues/398

1 个答案:

答案 0 :(得分:0)

我想你很想念dup旗。

此标志由客户端在向未发送原始版本消息到达的经纪商重新发送QOS 1/2消息时设置。

经纪人在对客户做同样的事情时也会设置它。

这些交易中的每一个都是独立的,第一次发送消息时在发布客户端上设置它将无法实现任何目标。

此处规范中的详细信息:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc385349261