社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  MQ

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

Ozkan • 4 年前 • 535 次点击  

有人能猜出问题是什么吗?因为我对如何解决这个问题一无所知。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
 
535 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Alexey Zimarev
Reply   •   1 楼
Alexey Zimarev    5 年前

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

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

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