具有TCP负载平衡使用者的RabbitMQ

具有TCP负载平衡使用者的RabbitMQ,rabbitmq,celery,load-balancing,scaling,Rabbitmq,Celery,Load Balancing,Scaling,需要一些关于如何使用RabbitMQ实现消费者负载平衡的技巧 情况如下: 我有两个应用程序,比如App1和App2(实际上是单个应用程序的两个阶段),运行在不同的主机上(可能在同一个AZ中,也可能不在同一个AZ中),rabbitMQ用于将完成一半的任务从App1移交给App2 App1和App2有多个实例。给定通信量,App1是TCP负载平衡的。我更喜欢App2是TCP负载平衡的——这样在需要的时候就会出现新的App2实例,等等 现在,根据我对RabbitMQ的理解,负载平衡器显然不能用作使用者

需要一些关于如何使用RabbitMQ实现消费者负载平衡的技巧

情况如下: 我有两个应用程序,比如App1和App2(实际上是单个应用程序的两个阶段),运行在不同的主机上(可能在同一个AZ中,也可能不在同一个AZ中),rabbitMQ用于将完成一半的任务从App1移交给App2

App1和App2有多个实例。给定通信量,App1是TCP负载平衡的。我更喜欢App2是TCP负载平衡的——这样在需要的时候就会出现新的App2实例,等等

现在,根据我对RabbitMQ的理解,负载平衡器显然不能用作使用者。因此,我认为设置可能如下所示-

传入请求->LB->App1*N1->RabbitMQ->workers->LB->App2*N2

(工人将通过LB将任务移交给App2实例)


我会用芹菜。可以使用自动缩放选项,但我不想编写自己的动态缩放算法。

RabbitMQ可以在集群中配置,您可以在该集群前面设置负载平衡器。负载平衡器不是使用者,使用者连接到集群ass中由负载平衡器指示的节点。您可以使用TCP负载平衡器,如HAProxy。但RabbitMQ服务器和客户端之间的连接是长时间运行的TCP连接。因此,在客户端进行简单的节点洗牌就足够了,而且管理起来也很简单(不需要HA TCP负载平衡器)。至少,包含副本队列的RabbitMQ节点会将消息转发给持有主队列的节点。只有掌握了这些知识,负载平衡才会真正有效。@Leon我不太担心RabbitMQ集群的负载平衡-在线上有足够的资料。我想要负载平衡App2实例。如果我将队列使用者代码作为App2的一部分,那么我不确定是否可以将LB放在App2实例之前。因此建议-。。。RabbitMQ->workers->LB->App2*N2[在完成最后一条评论之前点击返回]。。。工人将只将任务移交给LB,LB负责跨App2实例平衡负载请求@NicolasLabrot你是在建议使用HAProxy,我不需要额外的一层工人吗?我仍然需要一些使用者向队列注册,对吗?如果您运行多个连接到RabbitMQ的App2实例,它将是负载平衡的。信息以循环方式发送给消费者