【发布时间】:2023-03-06 23:18:01
【问题描述】:
您好,我有一个问题,我找了大约 2 天后无法解决,所以我会在这里写出来,尽可能清楚,以便它也可以帮助其他人。
场景是:
- 我们有一个应用程序,可以使用 Rabbitmq 集群处理大约 200k 个采用 amqp 协议的设备。
- 我们曾考虑让 1 个 Exchange 具有 200k 队列,每个设备大约有 6 个“路由密钥”。
- 这些队列需要持久且惰性,因为我们不想丢失任何消息。
- 我们正在使用镜像节点,因为我们需要 HA。
测试:
- 我创建了一个有 5 个节点和复制 2 个的集群
"definition": {
"ha-mode": "exactly",
"ha-params": 2,
"ha-sync-mode": "automatic",
"ha-sync-batch-size": 1
}
- 我还使用路由键创建了 50k 持久、惰性、队列。
def create_one_queue(queue_name, threadName, channel):
channel.queue_declare(queue=queue_name, durable=True, arguments={'x-queue-mode': 'lazy'})
for bind in BINDINGS:
channel.queue_bind(exchange=EXCHANGE, queue=queue_name, routing_key=bind.format(queue_name))
print("[{}]Created Queue {}".format(threadName, queue_name))
def create_queues(threadName, base):
channel = get_channel()
for i in range(0, 1000):
try:
queue_name = str(i + base)
create_one_queue(queue_name, threadName, channel)
except Exception as e:
print(e)
3. 当我试图继续增长并达到 200k 节点时开始崩溃而没有耗尽资源。
链接
我已经看过以下帖子:
https://www.rabbitmq.com/ha.html#ways-to-configure
https://www.cloudamqp.com/blog/2018-01-09-part3-rabbitmq-best-practice-for-high-availability.html
RabbitMQ - How many queues RabbitMQ can handle on a single server?
https://serverfault.com/questions/378165/rabbitmq-reasonable-performance-scale-expectations
http://rabbitmq.1065348.n5.nabble.com/How-many-queues-can-one-broker-support-td21539.html
https://www.quora.com/RabbitMQ/Can-rabbitMQ-or-zeroMQ-handle-1mil-queues
但我看到了矛盾(cloudamqp 建议使用少量队列,但在其他地方说您可能会到达 1M 队列)
问题
- 如果我没有耗尽资源,集群怎么可能开始崩溃?
- 我的方法错了吗?
- 有什么建议可以改进我的集群配置?
非常感谢
【问题讨论】:
-
你应该在 rabbitmq-users 谷歌群里问这样的问题; RabbitMQ 工程师不会密切监控 Stack Overflow。
-
感谢@GaryRussell 的提示,已经做到了。我看到你对 Rabbitmq 很有经验,你有没有工作过或见过有这么多队列的集群?我至少需要知道是可能的。谢谢
-
我不知道;对不起。
标签: rabbitmq amqp messagebroker rabbitmq-exchange