首页 > 解决方案 > Mass Transit RabbitMQ 请求/响应 - 响应移动到 _skipped 队列

问题描述

我正在使用 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);
    }
  }

标签: c#rabbitmqmasstransit

解决方案


推荐阅读