golang: optimize the logic of obtaining routing tasks (#580)
* golang: optimize the logic of obtaining routing tasks
* add log when queryRoute return nil
---------
Co-authored-by: guyinyou <guyinyou.gyy@alibaba-inc.com>
diff --git a/golang/client.go b/golang/client.go
index fbd3ef8..0a7defa 100644
--- a/golang/client.go
+++ b/golang/client.go
@@ -363,6 +363,7 @@
}
if len(response.GetMessageQueues()) == 0 {
+ cli.log.Errorf("queryRoute result has no messageQueue, requestId=%s", utils.GetRequestID(ctx))
return nil, errors.New("rocketmq: no available brokers")
}
return response.GetMessageQueues(), nil
@@ -499,7 +500,14 @@
cli.router.Range(func(k, v interface{}) bool {
topic := k.(string)
oldRoute := v
- newRoute, _ := cli.queryRoute(context.TODO(), topic, cli.opts.timeout)
+ newRoute, err := cli.queryRoute(context.TODO(), topic, cli.opts.timeout)
+ if err != nil {
+ cli.log.Errorf("scheduled queryRoute err=%v", err)
+ }
+ if newRoute == nil && oldRoute != nil {
+ cli.log.Info("newRoute is nil, but oldRoute is not. do not update")
+ return true
+ }
if !reflect.DeepEqual(newRoute, oldRoute) {
cli.router.Store(k, newRoute)
switch impl := cli.clientImpl.(type) {