6

我正在将 ZEROMQ 用于分布式消息传递应用程序。需要将客户端(DEALER 套接字)连接到多个服务器(服务器端的 ROUTER 套接字)。我在 CLIENT 方面有哪些选择?

  1. 在客户端为每个服务器端点(ROUTER 套接字)创建 DEALER 套接字。
  2. 在客户端仅创建一个 DEALER 套接字并添加多个端点。

我尝试了选项 2 - 连接到多个端点,但消息总是发送到第一个连接的端点。遵循以下步骤:

  • 创建 DEALER 套接字
  • 连接到第一个端点
  • 然后在运行时,使用 socket.connect(endpoint) 将另一个端点添加到套接字。我需要重新连接吗?

在 DEALER 套接字中,如果特定端点连接到多个端点,则没有选项可以在特定端点上发送消息。

任何想法?

4

1 回答 1

5

ZeroMQ 将某些行为编码为套接字类型。这些主要处理:

  1. 处理多个对等点
  2. 处理无法送达的消息
  3. 处理过多的吞吐量 (HWM)

DEALER 套接字可以连接到多个对等点,并使用 LRU(最近最少使用,也称为循环)来决定哪个对等点获取每条消息。如果您不想要这种行为,那么您不想要具有多个对等点的 DEALER 套接字。

如果您想决定哪个对等方收到消息,有两种选择:

  1. 为每个对等方创建一个 DEALER,并在适当的套接字上发送
  2. 创建一个连接到所有对等点的 ROUTER,并使用 IDENTITY 前缀来路由消息。您可能需要通过侧通道传递 IDENTITIES,才能使用 ROUTER-ROUTER 连接。

在运行时,使用socket.connect(endpoint). 我需要重新连接吗?

不,您不需要重新连接。您可以在计划期间随时添加(和删除)对等点。

于 2013-10-17T16:54:10.400 回答