【问题标题】:What is the best way to send async no-reply messages between peers with ØMQ?使用 ØMQ 在对等方之间发送异步无回复消息的最佳方式是什么?
【发布时间】:2012-03-29 22:30:15
【问题描述】:

我有一小群节点(例如 10 个节点)已经发布和订阅消息。这工作正常。集群是静态的,每个节点都知道其他节点的地址。

在我的用例中,我还需要所有节点都能够向任何特定节点发送消息,并且所有节点都应该监听发给它们的消息。发送节点不需要回复,不应该等待回复,也不需要知道其他节点已收到消息。

可以使用哪种模式和套接字类型来实现这一点?

我对 ØMQ 还很陌生,并且看过指南中的 Freelance Pattern,更具体地说是 Model Three - Complex and nasty。在我的情况下,使用此处描述的 ROUTER-ROUTER 方法是否合适?

我正在考虑让每个节点绑定到 ROUTER 套接字,将它们的地址设置为一个标识(并将其“轮询”到它们的消息循环中),并让节点在 ROUTER 套接字上发送,将接收节点地址指定为身份。

我是否错过了一些更简单的方法?使用上面的方法似乎有点复杂,因为我真的不需要握手过程来让接收端能够发送回复。

【问题讨论】:

    标签: zeromq


    【解决方案1】:

    为了在不需要回复的情况下将工作发送给对等方,我可能只使用扇出模式,它可以让您更有效地“触发后忘记”。

    Router 和 Dealer 确实存在于“扩展”请求/回复模式中的“设备”层。

    【讨论】:

    • 也许我在这里遗漏了一些东西,但是扇出如何让我只向特定节点发送消息?
    • 只有一个节点执行 PULL,而不是一系列节点。换句话说,当您需要使用“特定节点”用例时,您有一个 PUSH 和一个 PULL 对。执行 PUSH 时不期望收到任何回报,所以在我看来,它是比 REQ/REP 更好的异步隐喻。如果你只是想在架构上重用你已经拥有的东西,你也可以在单个节点之间建立一个 PUB/SUB。
    • PUSH-PULL 如果收件人关闭,则不会丢弃消息,根据文档,这意味着如果您的远程节点关闭(您要发送到的对等方)并返回,它会收到一堆旧消息。您当然可以通过跟踪接收方的上下状态(通过心跳或等效方式)并在节点关闭时立即关闭 PUsh 套接字(可能 linger=0)来缓解此问题。
    • 扇出模式是指哪一种?任何示例链接?
    • 我能给出的最佳建议是查看优秀的 ZeroMQ 指南:zguide.zeromq.org/page:all 不过总的来说,扇出/扇入是各种面向消息架构支持的常见消息传递模式。
    猜你喜欢
    • 2014-02-03
    • 2019-11-09
    • 2020-10-16
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2020-08-01
    • 2010-10-13
    • 2012-12-18
    相关资源
    最近更新 更多