go-micro.dev/v5@v5.12.0/registry/nats/nats_watcher.go (about) 1 package nats 2 3 import ( 4 "encoding/json" 5 "time" 6 7 "github.com/nats-io/nats.go" 8 "go-micro.dev/v5/registry" 9 ) 10 11 type natsWatcher struct { 12 sub *nats.Subscription 13 wo registry.WatchOptions 14 } 15 16 func (n *natsWatcher) Next() (*registry.Result, error) { 17 var result *registry.Result 18 for { 19 m, err := n.sub.NextMsg(time.Minute) 20 if err != nil && err == nats.ErrTimeout { 21 continue 22 } else if err != nil { 23 return nil, err 24 } 25 if err := json.Unmarshal(m.Data, &result); err != nil { 26 return nil, err 27 } 28 if len(n.wo.Service) > 0 && result.Service.Name != n.wo.Service { 29 continue 30 } 31 break 32 } 33 34 return result, nil 35 } 36 37 func (n *natsWatcher) Stop() { 38 n.sub.Unsubscribe() 39 }