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  }