Py学习  »  MQ

rabbitmq生成\我想忽略的跳过队列

Ozkan • 4 年前 • 529 次点击  

有人能猜出问题是什么吗?因为我对如何解决这个问题一无所知。rabbitmq生成 _跳过 排队,我不知道为什么会产生这些。它是在执行发布请求响应时生成的。

在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));

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

那么,这些跳过的队列还有什么其他原因呢?非常感谢您帮助我解决这个问题…

我不得不说,在消费方法中,在某些情况下,我们提出了 RequestTimeoutException 并在请求的应用程序中捕获它。这是经过测试的,不会生成跳过的队列。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38854
 
529 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Alexey Zimarev
Reply   •   1 楼
Alexey Zimarev    5 年前

跳过的队列是死信队列。这意味着您的端点队列已经绑定到某个消息交换,但不再有该消息的使用者。也许你改变了拓扑结构并移动了消费者。您可以转到RMQ管理UI,检查端点交换的绑定。如果查看以跳过队列结尾的消息,您将了解要查找的消息类型。

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

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