【问题标题】:NATS creating duplicate inboxes for replyNATS 为回复创建重复的收件箱
【发布时间】:2017-07-04 11:22:15
【问题描述】:

我一直在玩 NATS 消息传递,使用 C# 客户端。我创建了一个发送同步请求的消息发布者:

IConnection connection = new ConnectionFactory().CreateConnection();
Msg rsp = connection.Request("subject", Encoding.ASCII.GetBytes("some text"));

我使用队列组创建多个订阅者:

IConnection connection = new ConnectionFactory().CreateConnection();
connection.SubscribeAsync(
    "subject",
    "queue",
    (sender, args) =>
    {
        connection.Publish(args.Message.Reply, new byte[] { 0x00 });
    });

一切顺利。我可以发送多条消息,每条消息都发送给一个且只有一个订阅者,发送响应。

但是,如果我开始使用多个队列组,就会出错。假设我创建了 20 个发布者,使用主题“S1”、“S2”、“S3”进行发布……对于每个发布者我创建 5 个订阅者,所以第一个发布者的订阅者有一个主题“S1”和一个队列名称“Q1”等。

当我启动一个测试应用程序并运行 20 个发布者,每个发布者都在自己的线程中运行时,事情很快就停止了工作。发布者在等待同步响应时挂起。

我添加了一些跟踪,似乎回复令牌被复制了。因此,例如,两个不同的订阅者接收指定相同收件箱的消息:

Subject=S3;Reply=_INBOX.C403F3CD707D0EA6F4B1167CE0;Payload=<some text>}
Subject=S4;Reply=_INBOX.C403F3CD707D0EA6F4B1167CE0;Payload=<some text>}

我猜回复只能发给一个发布者,所以另一个会丢失。

【问题讨论】:

    标签: c# nats.io


    【解决方案1】:

    感谢您提出这个问题;重复的回复主题是一个错误。 一位贡献者最近为此问题添加了fix(源于Random 如何使用Environment.TickCount 作为种子)。

    修复目前在 master 分支中;当新版本被删减时,我会更新这个答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 2016-07-15
      相关资源
      最近更新 更多