gitee.com/h79/goutils@v1.22.10/discovery/resolver/resolver.go (about)

     1  package resolver
     2  
     3  import (
     4  	"gitee.com/h79/goutils/common/logger"
     5  	"gitee.com/h79/goutils/discovery/resolver/builder"
     6  )
     7  
     8  type Resolver interface {
     9  	Resolve(target builder.Target) []builder.Address
    10  }
    11  
    12  var _ builder.Resolver = (*Bridge)(nil)
    13  
    14  type Bridge struct {
    15  	build  Builder
    16  	target builder.Target
    17  	conn   builder.Connector
    18  }
    19  
    20  // ResolveNow builder.Resolver interface
    21  func (cr *Bridge) ResolveNow() {
    22  	logger.Info("Bridge: ResolveNow, target= '%v'", cr.target)
    23  	cr.update()
    24  }
    25  
    26  // Close builder.Resolver interface
    27  func (cr *Bridge) Close() {
    28  	logger.Info("Bridge: Close, target= '%v'", cr.target)
    29  }
    30  
    31  func (cr *Bridge) update() {
    32  	if addrs := cr.build.Resolve(cr.target); len(addrs) > 0 {
    33  		cr.conn.UpdateState(builder.State{Addresses: addrs, Attributes: nil})
    34  	}
    35  }
    36  
    37  func NewResolver(target builder.Target, cc builder.Connector, builder Builder) builder.Resolver {
    38  	r := &Bridge{
    39  		target: target,
    40  		conn:   cc,
    41  		build:  builder,
    42  	}
    43  	r.update()
    44  	return r
    45  }