0

我正在使用 C# NetMQ 库。我使用 Service Fabric 有状态服务在 Azure 中部署了生产者和消费者服务。我对两个服务进行了分区,以便每个服务都有两个实例。

生产者实例各自创建一个PublisherSocket并调用Bind。第一个绑定到 (eg) tcp://10.0.0.1:9501,第二个绑定到tcp://10.0.0.2:9502. (端口保持唯一,因为 SF 可能会重新平衡两个实例以在同一物理节点上运行。)

他们发布到一些任意主题(与这个问题无关)。(我用几帧数据调用SendMultipartMessage并传递它。)NetMQMessage

消费者实例各自创建一个SubscriberSocket和调用Connect。它们每个都连接到两个生产者地址。然后他们调用Subscribe并传递一个空字符串""作为主题。这应该会导致他们使用任一生产者发送的所有消息。

预期成绩:

  1. 两个生产者绑定,两个消费者连接/订阅。
  2. Producer1 发送消息 A,Producer2 发送消息 B。
  3. Consumer1 同时接收 A 和 B。
  4. Consumer2 同时接收 A 和 B。

本地 SF 集群上的实际结果:一切都符合预期。两个消费者都收到来自两个生产者的所有消息。

在 Azure 上运行的 SF 集群的实际结果:

  1. 绑定/连接/订阅都发生,没有异常或明显错误。
  2. 生产者发送消息没有错误。
  3. 两个消费者都从 Producer1 接收消息。
  4. 两个消费者都没有收到来自 Producer2 的消息。

笔记:

  • 生产处于循环中,所以这不是一些奇怪的启动问题。
  • 增加生产者/消费者的数量(例如每个 5 个实例)导致第一个生产者的消息总是被消费,然后其他生产者的一些消息被消费。大约一半的消息被消耗,但我看不到任何明显的模式。

问题:

  1. 在 Azure 中运行的 Service Fabric 群集与 ZeroMQ 的组合是否会导致 ZeroMQ 问题?
  2. 我应该设置任何 ZeroMQ 套接字选项吗?
  3. SF中有什么我可以改变的吗?

任何想法表示赞赏。

4

0 回答 0