2017-03-08 44 views
0

我可以防止發送到網橋的重複消息嗎? 我已經設置了客戶端的重複標誌,但代理仍然發送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

+0

請不要交叉後的事情多的地方,它的響應片段也 – hardillb

+0

混帳問題通常缺陷(實際問題的代碼)不是一般的問題,有一個Mosquitto開發者郵件列表將更適合這些問題。 – hardillb

+0

@hardillb,謝謝你的回覆。好吧,我明白了,對不起。我已經訂閱郵件列表,但沒有迴應,我猜郵件列表不工作?你最近有郵件列表中的郵件嗎? – Asoul

回答

0

我覺得你錯過理解DUP標誌。

此標誌由客戶端在向代理重新傳送QOS 1/2消息時設置,該消息未確認發送的原始版本消息的到達。

這也是由經紀人在對客戶做同樣的事情時設定的。

這些事務中的每一個都是獨立的,在發佈客戶端第一次發送消息時將它們設置爲無效。在這裏規格

詳情:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc385349261

+0

謝謝@hardillb,但是當我的客戶端沒有收到來自服務器的PUBACK(也許某些互聯網在中間斷開)時,發生這種情況,所以重新發送PUBLISH到服務器與dup = 1.我發送了m870兩次,第一次是dup = 0,第二次是dup = 1。 – Asoul

+0

我已更新原始帖子以獲取更多詳細信息。 – Asoul