【发布时间】:2018-02-21 00:46:18
【问题描述】:
我能否以某种方式选择不在请求/响应场景中创建 _skipped 队列?
我们选择这样构建我们的应用程序(不要问为什么,它有它的原因)。我们正在向多个消费者发出 PublishRequest,只有一个消费者响应。所有其他人将生成一个跳过的队列(超时错误)。我不想改变这个结构。但是如果我可以在 RabbitMQ 中禁用跳过队列的创建,那就完美了。
BusControl 请求:
BusControl = Bus.Factory.CreateUsingRabbitMq(busFactoryConfig =>
{
busFactoryConfig.Host(new Uri(ServerUrl), hostConfig =>
{
hostConfig.Username(Username);
hostConfig.Password(Password);
});
busFactoryConfig.AutoDelete = true;
busFactoryConfig.Durable = true;
});
请求方法:
var requestClient = BusControl.CreatePublishRequestClient<TRequest, TResponse>(TimeSpan.FromMilliseconds(5000));
TResponse response = TaskUtil.Await(() => requestClient.Request(request));
BusControl 回复:
BusControl = Bus.Factory.CreateUsingRabbitMq(busFactoryConfig =>
{
IRabbitMqHost rabbitMqHost = busFactoryConfig.Host(new Uri(ServerUrl), hostConfig =>
{
hostConfig.Username(Username);
hostConfig.Password(Password);
});
busFactoryConfig.ReceiveEndpoint(rabbitMqHost, receiveEndpointConfig =>
{
if (RetryLimit > 0)
receiveEndpointConfig.UseRetry(Retry.Incremental(3, 5000, 5000));
receiveEndpointConfig.Consumer<TConsumer>();
receiveEndpointConfig.PurgeOnStartup = false;
receiveEndpointConfig.AutoDelete = true;
receiveEndpointConfig.Durable = true;
});
});
消费者中的响应方法:
return context.RespondAsync(response);
如果我想让一个消费者超时,这将产生一个死信消息和一个跳过的队列,那么我返回这个:
return Task.CompletedTask;
但我不想要在 RabbitMQ GUI 中可见的跳过队列,除了它工作得很好。
几个月前我也向 Chris Patterson 提出了同样的问题,但没有得到答案:https://stackoverflow.com/a/39236139。
我只是不希望应用程序创建这么多跳过的队列,如果它只创建一个跳过的队列,那么我仍然可以忍受它,但是有这么多,因为队列名称中有一个标识符......:
【问题讨论】:
标签: c# rabbitmq message-queue masstransit