【发布时间】:2015-07-05 18:57:39
【问题描述】:
我有两种节点类型。一个Server 和一个Client。将有 1 个或多个 Server 或 Client 当前正在运行。
使用 MassTransit 和 RabbitMQ,我在尝试here 描述的 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 实例,则命令/响应按预期执行,在每个 ```Server`` 节点之间平均分配 Client 请求。
但是,如果我有多个 Client 实例正在运行,我将在 ```Client`` 端获得超时。
这是为什么?我需要支持多个 ```Client`` 实例,因为这是我的网络层。
【问题讨论】:
-
将客户端更改为使用 rabbitmq://192.168.10.201/*?temporary=true,您将获得每个客户端唯一的临时队列。
标签: rabbitmq masstransit