ZeroMQ中的请求 - 回复代理使用一个具有异步任务的worker

时间:2013-11-06 22:19:50

标签: c# zeromq

我想从ZeroMQ zguide实现类似于 Request-Reply Broker 的设计,但我没有提前运行多个工作线程,我希望有一个工作人员接收所有请求,并产生异步操作(任务)来处理它们并发送响应。

实现此目的的套接字类型的正确组合是什么?

3 个答案:

答案 0 :(得分:1)

您可能只需要一个工作人员来实现Load Balancing Message Broker。 “指南”中描述了这种模式,字面上指出:

“此经纪人执行以下操作:

  • 接受来自一组客户的连接。
  • 接受来自一组工人的联系。
  • 接受来自客户端的请求并将其保存在一个队列中。
  • 使用负载平衡模式将这些请求发送给工作人员。
  • 收到工人的回复。
  • 将这些回复发送回原始请求客户端。 “

如果您只有一名工作人员,则所有请求都保留在队列中并以FIFO方式处理。

答案 1 :(得分:1)

我使用以下套接字类型组合实现了这个:

请求:

  

客户经销商 - >服务器路由器 - >请求处理程序(生成)

  1. 客户端通过端口
  2. 上的DEALER套接字发送请求
  3. 服务器通过端口
  4. 上的ROUTER套接字接收请求
  5. 服务器在生成请求和客户端身份时将其直接传递给请求处理程序
  6. 回复:

      

    客户端经销商< - 服务器路由器< - 服务器经销商< - 请求处理程序   经销商

    1. 请求处理程序通过DEALER
    2. 上的inproc套接字将回复返回给服务器
    3. 服务器通过DEALER
    4. 上的inproc套接字接收来自请求处理程序的回复
    5. 服务器通过tcp端口上的ROUTER套接字将回复发送到客户端
    6. 客户端通过tcp端口上的DEALER套接字接收回复
    7. 我在这里发布了这个例子: https://github.com/imatix/zguide/blob/master/examples/Python/asyncrrhandlers.py

答案 2 :(得分:0)

听起来在任何时候都只有一个发布者和一个接收者 - 在这种情况下,Request / Recieve是最简单的一个。然而,如果需要,转移到发布/订阅模式并具有多个接收器将允许您水平扩展。