首先,我是 ZeroMQ 和消息队列系统的新手,所以我正在尝试做的事情可能会通过不同的方法来解决。我正在设计一个消息系统,它执行以下操作:
多个客户端连接到代理并发送需要处理的项目的 ID。客户端立即断开连接,不等待响应。
代理将项目发送给工作人员,每个工作人员一个项目,以执行一些处理。每个返回都返回一个处理完成的信号。
我有一个基本的系统设置,可以正确处理请求/回复,但我也希望能够执行以下操作:
查询代理以查看有多少进程实际在工作人员上运行,以及有多少只是在等待运行。
让代理确保每个 id 只有一个进程在运行 - 如果重复的 id 到达并且该项目当前没有被工作人员处理,请不要将其添加到队列中。
我正在使用带有经纪人/经销商套接字的投票设置。我使用的代码与Ian Barber 的这个示例非常相似。
我的第一个倾向(虽然我不确定如何在 zmq 中实现它)是让代理跟踪已收到的 id,以及那些正在由工作人员积极处理的 id。似乎代理会立即将请求转发给工作人员,无论它们是否可用于实际运行处理。然后工作人员将 id 排队并按顺序处理它们。这并不理想,因为我希望能够集中监控和控制系统中发生的事情以实现可靠性。
无论如何,这种设置的任何提示、提示或示例将不胜感激。