Mass Transit RabbitMQ Request/Response - responses moved to _skipped queue

时间:2018-09-18 20:33:15

标签: c# rabbitmq masstransit

I'm using Mass Transit RabbitMQ to create a Request/Response system. The servers receives the messages, and I also get back a response to my client, but the responses also remain on a _skipped queue. None of the questions/response I've red here helped, so here's my code.

Server, create bus:

        //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>();

Client, create bus:

//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();

Request send:

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;

Response:

  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);
    }
  }

0 个答案:

没有答案