RabbitMQ交换队列最大长度
我试图在基于RabbitMQ的应用程序中应用一些流控制 关于我的系统的非常狭隘的简介:RabbitMQ交换队列最大长度,rabbitmq,rabbitmq-exchange,Rabbitmq,Rabbitmq Exchange,我试图在基于RabbitMQ的应用程序中应用一些流控制 关于我的系统的非常狭隘的简介: 有一些blue Worker扫描和输入目录,并将消息发布到exchange 还有其他的红色工作者从这个交换中消费数据(基于路由密钥),并对数据执行任何操作,然后将其删除 “存储”在exchange中的数据相当大,工作人员查看数据所需的时间是显而易见的。过了一段时间,我从RabbitMQ收到一条内存警告,指出内存使用率太高,所有发布操作都已停止 我试图增加Rabbitmq使用的内存量,但它只是将问题推迟了几
- 有一些blue Worker扫描和输入目录,并将消息发布到exchange
- 还有其他的红色工作者从这个交换中消费数据(基于路由密钥),并对数据执行任何操作,然后将其删除
prefech_count=2
声明了红色工作者与交易所之间的链接)
说了这么多之后。。。我没有成功应用这样的最大长度:(
我正在使用Pika
声明我的队列并使用频道。
我读了这个()但没有在代码中实现它,我想看一个使用此最大大小标志的示例。Exchange不存储消息:队列存储消息 如果设置队列的最大长度,在
queue\u declare()
调用中设置相应的参数
,则不适合它的消息将被丢弃
但是,发布者将能够将消息发布到exchange,而不会注意到它
制作人可以得到关于他们未能使用的通知
如果您需要有关代码的帮助,请将代码包括在问题中。哦,我明白了。我现在通过使用“x-max-length”参数来实现这一点。但是,我无法释放消息,因此我尝试添加
{'x-overflow':'reject publish'}
参数,但是通道的返回值。basic_publish
始终是True
,即使我可以看到消息没有继续整个管道。你知道为什么吗?你启用了吗?从关于的文档中,该配置仅向rabbitmq指示要丢弃哪些消息,在如果您获得basic.nack,则会通知发布者消息尚未到达其预期目的地(队列)。根据您的描述,我假设您在发布服务器端执行了某种等待,以便在延迟后再次尝试?@AndyThomas,因为如果可以访问exchange,则消息始终会成功发布。如果您的exchange没有绑定到它的队列,则消息会丢失。如果队列已满,则消息会丢失。如果您需要为了不泄露信息,你需要使用死信,或者消费者对制作人的某种反馈,让制作人放慢速度/等待。但这太抽象了-添加一个小的工作示例,让我们帮助你。@Sigismondo谢谢!我想我确实会像你说的那样实施一些反馈机制。