RabbitMQ生成_skipped队列,我想忽略它

问题描述 投票:1回答:1

任何人都可以猜出问题是什么,因为我对如何解决这个问题一无所知。 RabbitMQ生成_skipped队列,我不知道它为什么生成这些队列。在执行发布请求响应时生成它。

在MassTransit.RequestClientExtensions中使用以下方法创建Request Client

public static IRequestClient<TRequest, TResponse> CreatePublishRequestClient<TRequest, TResponse>(this IBus bus, TimeSpan timeout, TimeSpan? ttl = null, Action<SendContext<TRequest>> callback = null) where TRequest : class where TResponse : class
{
  return (IRequestClient<TRequest, TResponse>) new PublishRequestClient<TRequest, TResponse>(bus, timeout, ttl, callback);
}

请求如下:

TResponse response = TaskUtil.Await(() => requestClient.Request(request));

如您所见,这是Request Response场景,其中Request被发送给所有消费者。但是因为目前我们只有一个消费者,它只被送到那个消费者手中。如果对多个消费者进行发布请求响应,一旦消费者做出响应,另一个消费者不知道在哪里做出响应并产生死信,则容易出现紧急情况。但是因为我们这里有一个消费者,我们可以消除这种可能性。

那么这些跳过队列的其他原因是什么呢?非常感谢您对我如何排除故障的任何帮助......

我不得不说,在Consume方法中,在某些情况下,我们引发一个RequestTimeoutException并在请求的应用程序中捕获它。这已经过测试,但这不会生成跳过的队列。

rabbitmq masstransit
1个回答
1
投票

跳过的队列是一个死信队列。这意味着您的端点队列具有对某些消息交换的绑定,但该消息不再具有消费者。也许您更改了拓扑并移动了消费者。您可以转到RMQ管理UI并检查端点交换的绑定。如果查看最终在跳过的队列中的消息,您将找到要查找的消息类型。

Exchange以消息类型命名,因此很容易找到过时的绑定。

然后,在管理UI中,您可以手动删除过时的绑定,并且不会有更多消息进入跳过的队列。

© www.soinside.com 2019 - 2024. All rights reserved.