...或者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评论框的所有评论的网址是什么?