Я использую Mass Transit RabbitMQ для создания системы запросов / ответов.Серверы получают сообщения, и я также получаю ответ своему клиенту, но ответы также остаются в очереди _skipped.Ни один из вопросов / ответов, которые я здесь выделил, не помог, так что вот мой код.
Сервер, создать шину:
//register mass transit bus
builder.Register(context =>
{
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
IRabbitMqHost rabbitMqHost = cfg.Host(new Uri(ConfigurationManager.AppSettings["RabbitMQHost"]), settings =>
{
settings.Username(ConfigurationManager.AppSettings["RabbitMQUser"]);
settings.Password(ConfigurationManager.AppSettings["RabbitMQPassword"]);
});
cfg.ReceiveEndpoint(rabbitMqHost, "request_queue", ec =>
{
ec.LoadFrom(context);
});
});
return busControl;
})
.SingleInstance()
.As<IBusControl>()
.As<IBus>();
//register consumers
builder.RegisterType<RequstHandleByBus>();
Клиент, создать шину:
//register mass transit bus
builder.Register(context =>
{
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
IRabbitMqHost rabbitMqHost = cfg.Host(new Uri(ConfigurationManager.AppSettings["RabbitMQHost"]), settings =>
{
settings.Username(ConfigurationManager.AppSettings["RabbitMQUser"]);
settings.Password(ConfigurationManager.AppSettings["RabbitMQPassword"]);
});
});
return busControl;
})
.As<IBusControl>()
.As<IBus>()
.SingleInstance();
Запрос на отправку:
var address = new Uri($"{ConfigurationManager.AppSettings["RabbitMQHost"]}/request_queue");
var requestTimeout = TimeSpan.FromSeconds(60);
IRequestClient<RequestType, ResponseType> client =
_bus.CreateRequestClient<RequestType, ResponseType>(address, requestTimeout);
ResponseType result = client.Request(request).Result;
Ответ:
public class RequestHandleByBus : IConsumer<RequestType>
{
private readonly RequestHandler _handler;
public RequestHandleByBus(RequestHandler handler)
{
_handler = handler;
}
public async Task Consume(ConsumeContext<RequestType> context)
{
ResponseType result = _handler.Handle(context.Message);
await context.RespondAsync(result);
}
}