任何人都可以猜出问题是什么,因为我对如何解决这个问题一无所知。 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
并在请求的应用程序中捕获它。这已经过测试,但这不会生成跳过的队列。
跳过的队列是一个死信队列。这意味着您的端点队列具有对某些消息交换的绑定,但该消息不再具有消费者。也许您更改了拓扑并移动了消费者。您可以转到RMQ管理UI并检查端点交换的绑定。如果查看最终在跳过的队列中的消息,您将找到要查找的消息类型。
Exchange以消息类型命名,因此很容易找到过时的绑定。
然后,在管理UI中,您可以手动删除过时的绑定,并且不会有更多消息进入跳过的队列。