具有多个消费者的请求/响应导致_skipped队列

时间:2017-03-02 14:10:27

标签: c# masstransit

考虑我正在执行请求,并且有两个Consumer实例同时接收相同的请求。

第一个消费者运作良好,并回应请求者。第二个Consumer也在处理请求,但在响应时会创建一个... _跳过的队列,并在那里写一条消息,原因是:dead-letter。我认为这是正常行为,因为请求已经得到了响应。

但我想要完成的是避免第二,第三,...消费者被写入_skipped队列。两个消费者处理请求的事实是我想要实现的,我也希望得到他们两个的响应。

请参阅以下代码:

请求:

BusControl = Bus.Factory.CreateUsingRabbitMq(busFactoryConfig =>
{
    busFactoryConfig.Host(new Uri(ServerUrl), hostConfig =>
    {
        hostConfig.Username("guest");
        hostConfig.Password("guest");
    });

    busFactoryConfig.AutoDelete = true;
    busFactoryConfig.Durable = true;
}); 

var requestClient = BusControl.CreatePublishRequestClient<IRequest, IResponse>(TimeSpan.FromSeconds(5));

响应(因为队列我有一个随机的Guid,这会导致多个消费者使用相同的请求)

BusControl = Bus.Factory.CreateUsingRabbitMq(busFactoryConfig =>
{
    IRabbitMqHost rabbitMqHost = busFactoryConfig.Host(new Uri(ServerUrl), hostConfig =>
    {
        hostConfig.Username("guest");
        hostConfig.Password("guest");
    });

    busFactoryConfig.ReceiveEndpoint(rabbitMqHost, Guid.NewGuid().ToString(), receiveEndpointConfig =>
    {
        receiveEndpointConfig.Consumer<TConsumer>();
        receiveEndpointConfig.AutoDelete = true;
        receiveEndpointConfig.PurgeOnStartup = false;
        receiveEndpointConfig.Durable = true;
    });
});

消费者:

public Task Consume(ConsumeContext<IRequest> context)
{
   return context.RespondAsync("");
}

0 个答案:

没有答案