我一直在使用C#客户端进行NATS消息传递。我创建了一个发送同步请求的消息发布器:
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”&c。
当我在20个发布者各自运行的线程中运行一个测试应用程序时,事情很快就停止了。发布者在等待同步响应时挂起。
我添加了一些跟踪,似乎正在复制回复令牌。因此,例如,两个不同的订阅者接收到指定相同的回复收件箱的消息:
Subject=S3;Reply=_INBOX.C403F3CD707D0EA6F4B1167CE0;Payload=<some text>}
Subject=S4;Reply=_INBOX.C403F3CD707D0EA6F4B1167CE0;Payload=<some text>}
我猜回复只能发给一个发布者,所以另一个发布者就会迷路。
发布于 2017-07-05 23:51:25
感谢您提出这个问题;被重复的回复主题是一个bug。一个贡献者最近为这个问题添加了一个fix (源于Random
如何使用Environment.TickCount
作为种子)。
修复程序目前在master分支中;当新的版本被删除时,我会更新这个答案。
https://stackoverflow.com/questions/44904651
复制相似问题