【问题标题】:RabbitMQ how to optimally publish/consume messages in a cluster?RabbitMQ 如何在集群中优化发布/消费消息?
【发布时间】:2018-11-30 14:10:01
【问题描述】:

我只是好奇发布和使用消息的最佳方式是什么,忽略了持久性、持久性和类似的东西,而是从集群中的网络角度来看?

如果我们通过打开到服务器 1 (s1) 的连接发布消息,但队列 @9​​87654321@ 在服务器 2 (s2) 上,则服务器必须将该消息从 s1 移动到 s2,对吗?

最好总是从我们连接的服务器的“本地”队列中消费,这意味着我们通过连接消费的所有队列都位于该服务器上,不是吗?

这是否过于复杂?或者最好总是向队列所在的服务器发布和消费?我每天要处理大约 3B 条消息,所以我试图尽可能减少延迟和负载。

【问题讨论】:

    标签: rabbitmq amqp


    【解决方案1】:

    是的,总是向队列主节点发布和消费是最佳的。您对连接到非主节点时发生的情况的理解是正确的。当然,这意味着您必须让您的应用程序知道这些信息(来自 HTTP API)。

    如果您不担心消息丢失,那么在这种情况下几乎不需要集群。


    注意:RabbitMQ 团队监控 the rabbitmq-users mailing list,并且有时只回答 StackOverflow 上的问题。

    【讨论】:

    • 谢谢,这实际上是一个非常好的观点,如果我什至需要一个集群,我可能不得不重新考虑(也许故障转移服务器会更好)。
    【解决方案2】:

    您忽略了正确指导的重要因素,例如持久性和消息大小。根据消息大小、持久性和工作负载,您有三个潜在的资源瓶颈 1) CPU 2) 网络 3) 存储。此外,根据每个队列上的客户端数量,还可能出现争用瓶颈。

    【讨论】:

    • 我没有忽略持久性,我只是不想让我的问题过于复杂,我使用的是非持久性消息,我的队列设置了 max-messages 参数并且我使用的是 no-ack,我我可以丢失消息。我想知道更多关于集群中的服务器如何传输消息的信息。感谢您的意见:)
    • 他们没有,他们重定向来自消费者的请求。 (通常)如果消息不持久且没有排序要求,则通常使用“循环”
    猜你喜欢
    • 2020-04-20
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    相关资源
    最近更新 更多