MassTransit 生成我想忽略的 _skipped 队列

MassTransit generates _skipped queues which I want to ignore

谁能猜出问题出在哪里,因为我不知道如何解决这个问题。 MassTransit 生成 _skipped 队列,我不知道它为什么生成这些队列。它是在执行发布请求响应时生成的。

在MassTransit.RequestClientExtensions

中使用以下方法创建请求客户端
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));

如您所见,这是将请求发送给所有消费者的请求响应场景。但是因为目前我们只有一个消费者,所以它只被发送给那个消费者。如果对多个消费者执行发布请求响应,则很容易出现死信,一旦一个消费者响应,另一个消费者就不知道在哪里响应并生成死信。但是因为我们这里只有一个消费者,所以可以排除这种可能性。

那么这些跳过队列的其他原因可能是什么?非常感谢您提供有关如何解决此问题的任何帮助...

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

跳过队列是死信队列。这意味着您的端点队列绑定到某些消息交换,但不再有该消息的消费者。也许您更改了拓扑结构并移动了消费者。您可以转到 RMQ 管理 UI 并检查端点交换的绑定。如果您查看最终进入已跳过队列的邮件,您会发现要查找的邮件类型。

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

然后,在管理UI中,您可以手动删除已过时的绑定,这样就不会再有消息进入跳过的队列。