这是我想要实现的目标 -
REST 服务(部署在多个实例上)获取请求,对其进行处理并将其传递给一组工作实例。
工人完成更大的工作,准备响应并将其发回。
与此同时,主服务完成了与原始请求相关的更多工作,将其与工作人员响应合并,并在请求连接上将其发送回调用方。
如何通过 ZMQ 对此进行建模?
我试过这样做——创建一个 PUSH 套接字并在服务实例中进行“绑定”。- 工作人员“连接”到相应的 PULL 套接字。- 由于同一个服务实例必须获得响应而不是其他服务实例,因此每条消息都发送到 PUSH 套接字,服务会附加一个响应队列名称。- Worker 接收消息,完成工作并在消息中给出的响应队列上推送(进行连接)。- 服务在它的响应队列上进行绑定,当它收到响应时,做剩下的工作并响应服务调用者。
问题 - - 服务实例中的所有线程都必须进行一些同步以获取 PUSH 队列以向工作人员发送请求。- 在负载很重的情况下,这个单一的 PUSH 队列开始阻塞。- 当我在多个实例上部署此服务代码并绑定到同一个套接字时,事情就会中断。
是否有使用 ZMQ 实现此目标的标准方法?我们决定使用 ZMQ 的原因是如果 worker 是另一个 HTTP 服务(重试、断开连接、连接池等)所需的连接管理更少,并且使用 ZMQ 具有更好的吞吐量。