小编tun*_*ood的帖子

具有多个线程的多个消费者之间的 RabbitMQ 负载均衡

我对 RabbitMQ 相当陌生,我的任务是修复正在发生的负载平衡错误。

设置如下:我们利用 RabbitMQ 通过 RPC Api 操作 Protobuf。

对 api 的请求将发布到rabbit,然后由 3 个实例之一使用(API 分布在应用程序的 3 个实例中)。

每个实例设置为利用 10 个线程来处理请求并返回响应。我们通过设置一个具有 10 个 ConcurrentConsumers 的 SimpleMessageListener 来实现此目的,这会产生 10 个处理每条消息的相应线程。

这导致:

Instance 1: Consumers 1-10, Instance 2: Consumers 11-20, Instance 3: Consumers 21-30. 
Run Code Online (Sandbox Code Playgroud)

由于 Rabbit 使用循环方法在消费者之间分配负载(而不是在应用程序的实例之间分配负载),如果有 5 条消息通过,我们最终会看到如下负载:

Instance 1: Threads 1-5 in use (6-10 idle), Instance 2: Idle, Instance 3: idle. 
Run Code Online (Sandbox Code Playgroud)

我希望发生的是: 5 条消息:

Instance 1: Threads 1,2 in use, Instance 2: threads 1,2 in use Instance 3: Thread 1 …
Run Code Online (Sandbox Code Playgroud)

java spring multithreading rabbitmq

6
推荐指数
1
解决办法
7918
查看次数

标签 统计

java ×1

multithreading ×1

rabbitmq ×1

spring ×1