This is an automated email from the ASF dual-hosted git repository.
RongtongJin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git
The following commit(s) were added to refs/heads/master by this push:
new f790a484 [Go] Fix round-robin load balancer always selecting the same
queue (#1324)
f790a484 is described below
commit f790a484f8e9124ada52ed20be73bc5c4f2e7758
Author: guyinyou <[email protected]>
AuthorDate: Mon Aug 10 15:07:43 2026 +0800
[Go] Fix round-robin load balancer always selecting the same queue (#1324)
* [Go] Fix round-robin load balancer always selecting the same queue
In TakeMessageQueues, the index was computed as `next+1` (constant)
instead of `next+i` (loop-varying), causing every loop iteration to
examine the same message queue. This defeats the round-robin intent
and prevents proper load distribution across brokers.
* [Go] Fix int32/int type mismatch in load balancer index calculation
---------
Co-authored-by: guyinyou <[email protected]>
---
golang/loadBalancer.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/golang/loadBalancer.go b/golang/loadBalancer.go
index 9e2e5b88..ae6c297f 100644
--- a/golang/loadBalancer.go
+++ b/golang/loadBalancer.go
@@ -73,7 +73,7 @@ func (plb *publishingLoadBalancer) TakeMessageQueues(excluded
*sync.Map, count i
candidateBrokerNames := make(map[string]bool, 32)
for i := 0; i < len(plb.messageQueues); i++ {
- idx := utils.Mod(next+1, len(plb.messageQueues))
+ idx := utils.Mod(next+int32(i), len(plb.messageQueues))
selectMessageQueue := plb.messageQueues[idx]
broker := selectMessageQueue.Broker
brokerName := broker.GetName()
@@ -102,7 +102,7 @@ func (plb *publishingLoadBalancer)
TakeMessageQueues(excluded *sync.Map, count i
}
if len(candidates) == 0 {
for i := 0; i < len(plb.messageQueues); i++ {
- idx := utils.Mod(next+1, len(plb.messageQueues))
+ idx := utils.Mod(next+int32(i), len(plb.messageQueues))
selectMessageQueue := plb.messageQueues[idx]
broker := selectMessageQueue.Broker
brokerName := broker.GetName()