У меня есть два типа узлов. A Server
и a Client
. Там будет 1 или более Server
или Client
в настоящее время работает.MassTransit RPC (RabbitMQ) тайм-аут с несколькими клиентами
Использование MassTransit и RabbitMQ, я получаю таймаут при попытке описанного шаблона RPC here.
Код для 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
равномерно распределяется между каждым узлом `` `Server``.
Однако, если у меня есть несколько запущенных экземпляров Client
, я получу тайм-ауты на стороне `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` ``.
Почему это? Мне нужна поддержка нескольких экземпляров `` `Client``, потому что это мой веб-уровень.
Измените клиента на использование rabbitmq: //192.168.10.201/*? Tempor = true, и вы получите уникальную временную очередь для каждого клиента. –