MassTransit / RabbitMq错误队列-如何删除消息?

问题描述

我有一个队列{QueueName}。 我定义了一个消费者和错误消息消费者,如下所示:

                        cfg.ReceiveEndpoint
                        (
                            queueName: QueueName,e =>
                            {
                                 e.UseMessageRetry(r => r.Immediate(2));

                                e.AutoDelete = false;
                                e.Durable = true;
                                e.Consumer(() => container.Resolve<My_Consumer>());
                                e.Consumer(() => container.Resolve<My_Fault_Consumer>());
                            }
                        );
                    

当消费者用尽其尝试次数来处理该消息时,出现故障的消息消费者就会加入并通过记录错误来处理该消息。 我注意到创建了额外的队列,名为{QueueName} _error。

My_Fault_Consumer不确认错误消息的消耗,并且队列增加

如何确认这些消息?

解决方法

error队列是中毒队列,或者invalid message channel

Fault<T>条消息的使用者使用此队列。 Fault消息与其他任何消息一样被发布。如果您查看中毒队列的内容,那里将看不到任何Fault消息,因为它打算保留您的消费者无法使用的原始消息。

这里的目的是您能够查看这些消息,并最终决定将它们移回原始队列以进行重新处理,或者只是评估这些消息的内容以进行故障排除。

MassTransit对该队列不执行任何操作,也不会从该队列中删除消息。您可以自己从UI或使用管理API或您的代理来完成此操作。