考虑我正在执行请求,并且有两个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("");
}