3

我想知道 zmq 是否已经解决了以下问题(或)位于 zmq 之上的应用程序需要处理它。

1) 向所有订阅者发布数据的中央发布者。这些数据本质上是静态的,类似于配置。数据可以随时修改。
2) 多个订阅者订阅来自该发布者的消息。发布者可以随时加入。
3)如果数据发生变化,发布者应该只将差异发布给现有订阅者。
4)如果订阅者稍后加入,发布者应该将所有数据(当前配置)发布给新订阅者。

Zeromq 指南建议遵循以下解决慢连接器综合症,但这并不能解决上述问题。 http://zguide.zeromq.org/page:all#Slow-Subscriber-Detection-Suicidal-Snail-Pattern

4

2 回答 2

3

指南中的克隆模式正是您想要的。

于 2013-05-06T09:52:56.477 回答
2

我在您的设置中看到的问题是它要求所有订阅者都具有相同的状态。如果所有订阅者都在版本 7 并且您发布了 7 到 8 差异,那么它们都会更新到版本 8。但这需要节点之间的紧密耦合状态同步。当订阅者不同步时,您将如何处理这种情况?

考虑这种替代设置:

  • “发布者”有一个绑定的 ROUTER 套接字
  • 每个“订阅者”都有一个连接到 ROUTER 的 DEALER 套接字
    • 不能使用 REQ 套接字,因为这会禁止发送“更新提示”(详细信息如下)
  • 当订阅者i加入网络时,它会向发布者发送一个“更新”请求,以便发布者知道订阅者的身份和他当前的版本version[i]
    • 发布者响应使订阅者i更新所需的差异
  • 如果发布者上的数据发生更改(即新版本),它会向所有已知订阅者发送“更新提示”
    • 当订阅者收到“更新提示”时,它会执行“更新”请求
  • (可选)订阅者定期发送“更新”请求(不频繁轮询)

这种方法有以下好处:

  • 发布者是服务器;订阅者是客户
  • 发布者从不发起任何实际数据的发送——它只响应来自客户端的请求(也就是说,“更新提示”不算发送实际数据)
  • 订阅者都独立地保持自己最新(最终一致性),即使它们可能会间歇性地不同步
于 2013-05-03T19:10:22.773 回答