【问题标题】:Send duplicate message to bridge向网桥发送重复消息
【发布时间】:2017-03-08 13:01:32
【问题描述】:

我可以防止向网桥发送重复消息吗? 我已经从客户端设置了重复标志,但代理仍然发送 dup = 0 的新消息。

消息 m870 被发送了两次,因为第一次 PUBACK 没有被客户端收到(可能是中间网络中断了)。客户端重新发送了 dup = 1 的 m870,但服务器仍然将消息发送到 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

【问题讨论】:

  • 请不要将内容交叉发布到多个地方,它会分散响应
  • 另外 git 问题通常是针对缺陷(代码的实际问题)而不是一般问题,有一个 Mosquitto 开发人员邮件列表更适合这些问题。
  • @hardillb,感谢您的回复。好的,我明白了,对此感到抱歉。我已经订阅了邮件列表但没有收到回复,我猜邮件列表不起作用?您最近收到邮件列表中的邮件了吗?
  • 因为这个,我不知道在哪里发布我的问题,所以我发布到stackoverflow,昨天我发现那里有github问题,也在那里发布。我不知道在哪里可以接触到开发这个的人:(

标签: mqtt mosquitto


【解决方案1】:

我认为您对 dup 标志有误解。

该标志由客户端在向未确认发送的原始版本消息到达的代理重新传递 QOS 1/2 消息时设置。

代理在对客户端执行相同操作时也会设置它。

这些事务中的每一个都是独立的,第一次发送消息时在发布客户端上设置它不会有任何效果。

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

【讨论】:

  • 感谢@hardillb,但是当我的客户端没有从服务器收到 PUBACK 时发生这种情况(可能中间有一些互联网中断),所以将 PUBLISH 重新发送到 dup = 1 的服务器。我已经发送m870 两次,第一次是 dup = 0,第二次是 dup =1。
  • 我已经更新了原帖以获得更详细的描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 2015-11-08
  • 2014-07-23
  • 2019-01-13
  • 2012-12-30
  • 1970-01-01
相关资源
最近更新 更多