Mass / Transit RabbitMQ Запрос / Ответ - ответы перемещены в очередь _skipped - PullRequest
0 голосов
/ 18 сентября 2018

Я использую 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);
    }
  }
...