Browse Source

修复select获取到的服务可能不可用的情况

lxg 2 years ago
parent
commit
ae2b2c050a
1 changed files with 14 additions and 3 deletions
  1. 14 3
      registry/selector.go

+ 14 - 3
registry/selector.go

@@ -1,6 +1,13 @@
 package registry
 
-import "context"
+import (
+	"context"
+	"errors"
+)
+
+var (
+	ErrServiceUnavailable = errors.New("service unavailable")
+)
 
 const (
 	StatusHealthy = "healthy"
@@ -20,11 +27,15 @@ func (selector *Selector) Select(ctx context.Context, name string) (node *Servic
 	if nodes, err = selector.registry.Get(ctx, name); err != nil {
 		return
 	}
-	for _, node = range nodes {
-		if node.Status == StatusHealthy {
+	for _, nv := range nodes {
+		if nv.Status == StatusHealthy {
+			node = nv
 			break
 		}
 	}
+	if node == nil {
+		err = ErrServiceUnavailable
+	}
 	return
 }