PUB/SUB包含短期发布者和长期订阅者

Ale*_*ysh 7 linux ipc zeromq

上下文:操作系统:Linux(Ubuntu),语言:C(实际上是Lua,但这应该不重要).

我更喜欢基于ZeroMQ的解决方案,但会接受任何足够的理智.

注意:由于技术原因,我不能在这里使用POSIX信号.

我在一台机器上有几个相同的长寿命流程("工人").

我不时需要通过命令行工具向每个进程传递控制消息.例:

$ command-and-control worker-type run-collect-garbage

本机上的每个工作人员都应收到一条run-collect-garbage消息.注意:如果解决方案在某种程度上适用于集群中所有计算机上的所有工作程序,那将是完美的,但我可以自己编写该部分.

如果我将存储有关正在运行的工作人员的一些信息,这很容易做 例如,将它们的PID保存在已知位置,并在已知路径上打开控制Unix域套接字,其中包含PID.或者打开TCP套接字并在某处存储主机和端口.

但这需要仔细管理存储的信息 - 例如,如果工人流程突然死亡会怎么样?(没有什么是难以管理的,但是,仍然,额外的大惊小怪.)此外,信息需要存储在某个地方,从而增加了额外的复杂性.

在PUB/SUB风格中有一个很好的方法吗?也就是说,工作者是订阅者,命令和控制工具是一个发布者,他们所知道的只是一个"频道网址",所以说,要发送消息.

其他要求:

  • 发送到控制通道的消息必须从poll(select,whatever)循环中唤醒worker.
  • 必须保证邮件传递,并且必须覆盖正在收听的每个工作人员.
  • 工作者应该有一种方法来监视消息而不会阻塞 - 理想情况下是通过上面提到的poll/select/whatever循环.
  • 理想情况下,工作进程在某种意义上应该是"服务器" - 他不应该担心保持与"通道服务器"(如果有的话)持久性等的连接 - 或者这应该由框架透明地完成.

Ste*_*e-o 4

通常,这种模式需要发布者的代理,即您发送到代理,该代理立即接受交付,然后可靠地转发到最终订阅者工作人员。ZeroMQ 指南涵盖了实现此目的的几种不同方法。

http://zguide.zeromq.org/page:all

  • 我在搜索时发现了另一个可能有用的事情,发现了我这个问题:http://code.google.com/p/ops/ - 我没有使用过它,因此无法与它交谈,只是将其添加为评论,以防您发现 zmq 缺乏任何方面。 (2认同)