Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RabbitMQ交换队列最大长度_Rabbitmq_Rabbitmq Exchange - Fatal编程技术网

RabbitMQ交换队列最大长度

RabbitMQ交换队列最大长度,rabbitmq,rabbitmq-exchange,Rabbitmq,Rabbitmq Exchange,我试图在基于RabbitMQ的应用程序中应用一些流控制 关于我的系统的非常狭隘的简介: 有一些blue Worker扫描和输入目录,并将消息发布到exchange 还有其他的红色工作者从这个交换中消费数据(基于路由密钥),并对数据执行任何操作,然后将其删除 “存储”在exchange中的数据相当大,工作人员查看数据所需的时间是显而易见的。过了一段时间,我从RabbitMQ收到一条内存警告,指出内存使用率太高,所有发布操作都已停止 我试图增加Rabbitmq使用的内存量,但它只是将问题推迟了几

我试图在基于RabbitMQ的应用程序中应用一些流控制

关于我的系统的非常狭隘的简介:

  • 有一些blue Worker扫描和输入目录,并将消息发布到exchange
  • 还有其他的红色工作者从这个交换中消费数据(基于路由密钥),并对数据执行任何操作,然后将其删除
“存储”在exchange中的数据相当大,工作人员查看数据所需的时间是显而易见的。过了一段时间,我从RabbitMQ收到一条内存警告,指出内存使用率太高,所有发布操作都已停止

我试图增加Rabbitmq使用的内存量,但它只是将问题推迟了几个小时(运行时)。我还使队列基于磁盘而不是基于ram,但我的磁盘已满

由于我的输入没有那么大,我可以接受一个“大”的输入队列,蓝色工人从中读取他们的输入。所以我想试着在blue workers和交易所之间的链接上设置一些“最大长度”。我相信我不会在这里失去任何东西,因为我系统的真正瓶颈是红色工作者(顺便说一句,我用
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谢谢!我想我确实会像你说的那样实施一些反馈机制。