【发布时间】:2019-07-11 14:44:18
【问题描述】:
我有一个 rabbitmq 队列,每个发布到该队列的数据大约为 1 MB 大小。每秒有 4 或 5 个数据发布到此队列。
消费者一个一个地消费每个数据(Fetch=1)。当我停止消费者服务 30000 排队的消息准备好使用。当我启动消费者时,它的消耗率为 30/s+。暂时还好。
在白天发布者永远不会停止发布,消费者可以处理队列。但是在晚上发布者不再发送数据(这不是错误。它应该是这样的)。第二天一早,发布者开始每秒发布 7 个数据。这次兔子队列开始继续往上走。
首先想到的是消费者无法处理数据。但它每秒可以消耗 30/s+ 的数据。
我知道消费速度取决于消费者。
但是。
我认为兔子有一些机制会在一段时间后降低消费者的速度。也许是锁定机制,也许是内部日志。我找不到任何解决方案。请帮忙
这张图显示了消费者速度的极限。
【问题讨论】:
-
消费者是如何实现的?它使用推式还是拉式方法?它每秒只消耗 3.8 条消息。 编辑:屏幕截图显示 消费者使用率为 0%。这意味着 RabbitMQ 总是必须等待消费者能够处理下一条消息。 RabbitMQ 永远不能只将发布的消息推送给消费者。见rabbitmq.com/blog/2014/04/14/…
-
它使用 basic.consume 函数。这是拉式方法(正确?)。未定义获取数据变量(默认情况下它为 1)。问题是消费者每秒可以消耗 30/s+ 的数据。队列工作 24 小时。 8 小时出版商从未停止出版。 11 小时发布者没有发送任何数据。早上发布者以 7 数据/秒开始。我将尝试捕获 30/s+ 的消耗速度并再次发送。
-
你怎么知道消费者每秒处理 30 条消息?它现在可以处理这个速率吗?
-
这很混乱。当数据(30000 个队列)准备好时,消费者消耗 30/s。当发布者不闲着时,兔子就好了。但是发布者空闲了一段时间(对我来说是 10 小时)并在空闲时间消耗速度后开始流。我将再次测试并发送 30/s 速度截图。我之前没有检查消费者的使用情况。
-
我从不增加预取计数。我会再尝试。感谢@LutzHorn 的回答。博客解释了大部分事情。
标签: rabbitmq