我对 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)