【问题标题】:ZeroMQ Dealer to Dealer - work distributionZeroMQ 经销商到经销商 - 工作分配
【发布时间】:2016-08-23 22:30:09
【问题描述】:

考虑以下设置。我将connect() 多个DEALER 套接字(客户端)连接到另一个DEALER,绑定到一个地址(服务器)。正是其中一个客户端循环调用recv(),而其他客户端可能偶尔会向服务器发送一些东西。

服务器套接字会尝试将发送的消息分发给那些没有收到任何东西的客户端吗?在 ZeroMQ 指南和 zmq_socket 手册页中,我找不到经销商套接字如何处理工作分配。

我使用 ZMQ 4.1。

【问题讨论】:

  • 尾部注释“在zmq_socket 联机帮助页中也没有”是不公平的。手册页定义了DEALER-side 行为,应在分布式处理上下文中理解。由于多种原因,本端“行为原语”不进行远端握手流控制。如果有这种需要,软件架构师可以根据他们的个人需求创建额外的抽象和信令层,以添加相互握手(其中O(1) 可扩展性、延迟包络和资源节约是任何此类添加的最终目标-努力)
  • 我说找不到,现在我看到了,明白了:)
  • 您可能会采取不同的方法,让您的服务器成为router socket。使用路由器套接字固有的 ID,您可以完全控制服务器发送消息的位置。

标签: message-queue zeromq distributed-computing


【解决方案1】:

并非所有版本的 ZeroMQ 都以相同的方式工作

安全的方法是检查各自的版本API man-page了解详情。由于互操作性原因,当任何交易对手根本没有任何更新版本的 API 绑定可用时,并非所有项目都可以使用最新的 API。然后最年长的统治人群。

ZeroMQ 2.1.11 API 不允许 DEALER/DEALER
ZeroMQ 4.2.0 API 允许

无论如何,API man-pages 始终是值得了解的详细信息来源:

4.2.0
ZMQ_DEALER
ZMQ_DEALER 类型的套接字是用于扩展请求/回复套接字的高级模式。发送的每条消息在所有连接的对等方之间循环,收到的每条消息都从所有连接的对等方公平排队。

当ZMQ_DEALER 套接字由于达到高水位标记而进入静音状态时所有对等点,或者如果根本没有对等点,则套接字上的任何zmq_send(3) 操作都应阻塞,直到静音状态结束或至少一个对等点可用于发送;消息不会被丢弃。

当ZMQ_DEALER 套接字连接到ZMQ_REP 套接字时,发送的每条消息都必须包含一个空消息部分、分隔符,然后是一个或多个正文部分。

ZMQ_DEALER 的摘要特点

Compatible peer sockets:      ZMQ_ROUTER, ZMQ_REP, ZMQ_DEALER
Direction:                    Bidirectional
Send/receive pattern:         Unrestricted
Outgoing routing strategy:    Round-robin
Incoming routing strategy:    Fair-queued
Action in mute state:         Block

【讨论】:

  • 谢谢,但这并不能真正回答我的问题,即经销商是否尝试向不调用 recv() 的同行发送消息。我应该说我对 4.x 版本很感兴趣,并且我阅读了您引用的联机帮助页。
  • 嗯,实际上手册页确实说消息在所有连接的对等方之间是循环的。我想我只是希望 ZMQ 更聪明一点......
  • 倒数第三行准确地解释了DEALER设计的本质。答案不值得你反对。
  • 在 ZeroMQ 领域工作多年后,我敢说它不聪明,或者将我的责任转移到 ZMQ 方面,希望它更聪明。 S可扩展F正规C通信Patterns是行为的原语,而软件架构师负责他们的适当的重复使用和组合。以可预测和可扩展方式行事的能力是我们从工具箱中获得的最大力量。任何人都可以添加额外的信号层来检测/区分“接收”和“非活动”对等方,并使用盲信循环分发规则以外的其他方法
  • 你说得对,它没有,尽管它可能包含类似“TL;DR: No.”的内容。 :) 现在接受你的回答。
【解决方案2】:

我写了一个小测试程序,发现dealer socket不知道对方是否在接收。因此,它会尝试将传出消息分发给所有连接的对等点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2010-09-25
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    相关资源
    最近更新 更多