...或者zmq如何處理斷開的客戶端?如果客戶端斷開連接,它可以繼續接收消息,但在這麼多秒之後自行清理後,是否有某種隊列超時?什麼是RabbitMQ的「x-expires」論證的ZeroMQ eqivillent?
2
A
回答
2
參見:http://api.zeromq.org/2-1:zmq-setsockopt
ZMQ插座具有高水位線的概念。
從文檔:
The high water mark is a hard limit on the maximum number of outstanding messages ØMQ shall
queue in memory for any single peer that the specified socket is communicating with.
If this limit has been reached the socket shall enter an exceptional state and depending on
the socket type, ØMQ shall take appropriate action such as blocking or dropping sent messages.
對於每種類型的ZMQ套接字(REQ,REP,PUB,SUB等),你可以檢查文件上的行爲 - 如果它阻止發送消息或丟棄它們。
大多數情況下,當客戶端斷開連接時,它會丟棄消息。如果這對您很重要,您必須在ZMQ模式之上構建消息持久性和可靠性。
1
您可以使用幾種不同的策略,這取決於您的需求(沒有人適合所有答案)。
一般情況下,如果客戶端斷開連接,服務器端的隊列將被刪除。這對PUB到SUB流程是正確的,並且PUSH到PULL流程是正確的。
如果要處理頻繁斷開連接,可以使用ROUTER-DEALER並在連接上設置標識(在DEALER側,連接前)。然後,ROUTER會爲DEALER排隊消息,即使它消失並返回。然後,您可以使用HWM限制該隊列的大小。
如果你想要超時,它會更復雜一些,因爲ZeroMQ會永遠保留消息,或者如果它們不能排隊,就會立即丟棄消息。您需要將消息排列在服務器的自己的列表結構中,將HWM設置爲1,並使用非阻塞發送將它們從隊列中推出,因爲它們有空間。然後,您可以自己過期客戶並刪除與其關聯的隊列。這聽起來像工作,但很簡單。
相關問題
- 1. 什麼是ZeroMQ?
- 2. 什麼是RabbitMQ的
- 3. 什麼是zeromq用例?
- 4. ZeroMQ的預期性能是什麼?
- 5. Kafka優於RabbitMQ的優勢是什麼?
- 6. 什麼是評論
- 7. 什麼是爭論?
- 8. 什麼是「爭論」?
- 9. 什麼是工作XSUB/XPUB代理的zeromq
- 10. 什麼是最新/最穩定的ZeroMQ C#版本?
- 11. 什麼是facebook評論api中的xid?
- 12. 評論中的「@」符號是什麼?
- 13. 評論「frozen_string_literal:true」是做什麼的?
- 14. 評論的最佳方法是什麼?
- 15. 沒有「自我」論證的類的函數的意義是什麼?
- 16. 爲什麼rabbitmq的隊列綁定是自動更改的?
- 17. RabbitMQ的exchange.declare()中的nowait是什麼意思?
- 18. 用RabbitMQ排隊的建築評論?
- 19. RabbitMQ用什麼語言編寫的?
- 20. ZeroMQ + Protobuf的替代方案(是ZeroMQ死於Java的嗎?)
- 21. RabbitMQ - 連接遠程服務器時的主機名是什麼?
- 22. RabbitMQ:`rabbitmqctl list_exchanges`下的'direct'標題是什麼意思?
- 23. 在Python中驗證評論的最佳正則表達式是什麼?
- 24. 語義上,什麼是論壇?
- 25. 什麼是開源評論系統?
- 26. 談論數據庫時TBS是什麼?
- 27. 什麼是#pragma評論(lib,「lib/glut32.lib」)?
- 28. ParentViewController是零,無論我做什麼
- 29. 評論「COMBAK」是什麼意思?
- 30. 查看來自Facebook評論框的所有評論的網址是什麼?