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 }