rabbitmq - RabbitMQ 交换队列最大长度
问题描述
我正在尝试在基于 RabbitMQ 的应用程序中应用一些流控制。
我的系统的一个非常狭窄的简介:
- 有一些蓝工扫描和输入目录并将消息发布到交换。
- 还有其他 red-workers 从这个交换中消费(基于路由键)并对数据做任何他们做的事情,而不是删除它。
交换中“存储”的数据非常大,工作人员检查它所花费的时间是显而易见的。一段时间后,我收到来自 RabbitMQ 的内存警告,指出内存使用率过高并且所有发布操作都已停止。
我试图增加 Rabbitmq 正在使用的内存量,但它只是将问题推迟了几个小时(运行时)。我还使队列基于磁盘而不是基于内存,但我的磁盘已满。
由于我的输入不是那么大,我可以忍受一个“大”输入队列,蓝色工人从中读取他们的输入。所以我想尝试在蓝工和交易所之间的链接上设置一些“最大长度”。我相信我不会在这里丢失任何东西,因为我系统的真正瓶颈是 red-workers(顺便说一下,我声明了 red-workers 和交易所之间的链接 a prefech_count=2
)。
说了这么多之后......我没有设法应用这样的最大长度:(我Pika
用来声明我的队列并使用频道。我读了这个(https://www.rabbitmq.com/maxlength.html ) 但没有设法在我的代码中实现它,我想看看一个使用这个 max-size 标志的例子。
解决方案
交换不存储消息:队列存储。
如果您设置队列的最大长度,arguments
在queue_declare()
调用中设置相应的,不适合它的消息将被丢弃。
但是,发布者将能够在不注意的情况下将消息发布到交易所。
生产者可以使用dead-lettering获得有关它们失败的通知。
如果您需要代码方面的帮助,请在问题中包含代码。
推荐阅读
- sql - 使用交叉连接创建并使用 STUFF 编辑的列中的唯一值
- css - CSS不显示在iPhone上
- wordpress - 如何修复网站速度错误:加载以下网络字体时,您的页面未使用字体显示规则?
- api - 获取 TypeError:load() 缺少 2 个必需的位置参数:'tags' 和 'export_dir'"
- r - 检查字符串是否包含特定的缩写
- flutter - Flutter BottomNavigationBar 边框?
- mysql - 在电子应用程序中连接到 mysql:ER_NOT_SUPPORTED_AUTH_MODE
- java - 我正在尝试通过反应来使用 API
- wordpress - wordpress,我找不到重定向的定义位置
- elasticsearch - 在 script_score 中使用嵌套值