MassTransit RPC(RabbitMQ)与多个客户端超时
我有两种节点类型。 Server
和Client
。 将有一个或多个Server
或Client
当前正在运行。
使用MassTransit和RabbitMQ时,在尝试此处描述的RPC模式时会出现超时。
Server
和Client
的代码很简单,用于测试。
代码Server
class Program
{
static void Main(string[] args)
{
var serviceBus = ServiceBusFactory.New(sbc =>
{
sbc.UseRabbitMq();
sbc.ReceiveFrom("rabbitmq://192.168.10.201/mybus_responder");
sbc.Subscribe(x =>
{
x.Handler<TestEvent>((ctx, @event) =>
{
Console.WriteLine("Received message " + @event.Message);
ctx.Respond(new TestEventResponse { Response = "Processed message "" + @event.Message + """ });
});
x.Handler<TestEvent2>((ctx, @event) =>
{
Console.WriteLine("Received message " + @event.Message);
ctx.Respond(new TestEventResponse2 { Response = "Processed message "" + @event.Message + """ });
});
});
});
Console.WriteLine("Listening for events...");
Console.ReadLine();
}
}
代码为Client
class Program
{
static void Main(string[] args)
{
var serviceBus = ServiceBusFactory.New(sbc =>
{
sbc.UseRabbitMq();
sbc.ReceiveFrom("rabbitmq://192.168.10.201/mybus");
});
Console.WriteLine("Ready to send events...");
var eventType = false;
while (true)
{
eventType = !eventType;
var message = Path.GetFileNameWithoutExtension(Path.GetRandomFileName());
Console.WriteLine("Sending message " + message);
if (eventType)
{
serviceBus.PublishRequest(new TestEvent {Message = message}, configurator =>
{
configurator.Handle<TestEventResponse>(response =>
{
Console.WriteLine(response.Response);
});
configurator.SetTimeout(TimeSpan.FromSeconds(5));
});
}
else
{
serviceBus.PublishRequest(new TestEvent2 {Message = message}, configurator =>
{
configurator.Handle<TestEventResponse2>(response =>
{
Console.WriteLine(response.Response);
});
configurator.SetTimeout(TimeSpan.FromSeconds(5));
});
}
}
}
}
如果我正确运行每个节点类型的1个,则命令/响应按预期运行。 如果我有超过1个Server
实例,则命令/响应按预期执行,在每个“服务器”节点之间均匀分配Client
请求。
但是,如果我有多个Client
实例正在运行,我会在“ Client
获取超时。
为什么是这样? 我需要支持多个```Client``实例,因为这是我的Web层。
我相信这只是因为你最终在实例之间共享一个队列,并且他们吞噬了对方的消息。 每个客户端和服务器都需要一个独特的队列来读取。
链接地址: http://www.djcxy.com/p/61225.html上一篇: MassTransit RPC (RabbitMQ) timeout up with multiple clients