我们的团队正在进行峰值冲刺,以在 ActiveMQ 或 RabbitMQ 之间做出选择。我们制作了 2 个小型生产者/消费者峰值,发送一个对象消息,其中包含一个由 16 个字符串、一个时间戳和 2 个整数组成的数组。峰值在我们的开发机器上没有问题(消息被很好地使用)。
然后是基准测试。我们首先注意到,有时,在我们的机器上,当我们发送大量消息时,消费者有时会挂起。它在那里,但消息在队列中堆积。
当我们走上卧推平台时:
- 2 个 rabbitmq 机器集群,4 核/3.2Ghz,4Gb RAM,通过 VIP 进行负载平衡
- 一到六个消费者在 rabbitmq 机器上运行,将消息保存在 mysql DB 中(与 DB 相同的机器类型)
- 12 个生产者运行在 12 台 AS 机器 (tomcat) 上,使用在另一台机器上运行的 jmeter 进行攻击。负载约为每秒 600 到 700 个 http 请求,在产生相同负载的 RabbitMQ 消息的 servlet 上。
我们注意到有时,消费者挂起(好吧,他们没有被阻塞,但他们不再消费消息)。我们可以看到,因为每个消费者在数据库中保存大约 100 条消息/秒,所以当一个消费者停止消费时,数据库中每秒保存的总体消息以相同的比率下降(如果说有 3 个消费者停止消费,我们会从 600 条消息/秒下降到 300 条消息/秒)。
在此期间,生产者一切正常,仍以 Jmeter 速率(约 600 条消息/秒)生产。消息在队列中,并由仍然“活着”的消费者接收。
我们首先使用生产者加载所有 servlet,然后逐个启动所有消费者,检查连接是否正常,然后运行 jmeter。
我们正在将消息发送到一个直接交换机。所有消费者都在监听与该交换机绑定的一个持久队列。
这一点对于我们的选择至关重要。您在 rabbitmq 中看到过这种情况吗?您知道发生了什么吗?
谢谢您的回答。
答案1
我在使用 RabbitMQ STOMP 插件时看到了这种行为。我还没有找到解决方案。
您使用 STOMP 插件吗?