【问题标题】:Don't create skipped queues when there is a dead-letter message有死信消息时不要创建跳过队列
【发布时间】: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


    【解决方案1】:

    这是一个默认的中间件,所以目前无法关闭它。但是,您可以为 JObject 创建一个空的消费者,它将消费所有消息,这意味着无论您收到什么消息,都至少有一个消费者。那么死信队列中间件将不会被使用。

    【讨论】:

    • 关于 JObject 消费者的问题。它会干扰我拥有的消费者吗?这些消费者的首要任务是什么?我让消费者​​监听特定的消息类/接口。 JObject Consumer 是否有可能使用我的自定义消息?
    • 它会消费所有消息,但如果您有多个消息类型的消费者(如果使用多态调度,则为类型层次结构) - 他们都应该得到一份副本。
    猜你喜欢
    • 2019-09-27
    • 2021-10-07
    • 1970-01-01
    • 2012-09-23
    • 2021-03-16
    • 2012-12-28
    • 1970-01-01
    • 2021-12-29
    • 2015-04-21
    相关资源
    最近更新 更多