diff --git a/network/resolver/dns/dns.go b/network/resolver/dns/dns.go new file mode 100644 index 00000000..c905df0e --- /dev/null +++ b/network/resolver/dns/dns.go @@ -0,0 +1,30 @@ +// Package dns resolves ids to dns srv records +package dns + +import ( + "fmt" + "net" + + "github.com/micro/go-micro/network/resolver" +) + +type Resolver struct{} + +// Resolve assumes ID is a domain name e.g micro.mu +func (r *Resolver) Resolve(id string) ([]*resolver.Record, error) { + _, addrs, err := net.LookupSRV("network", "udp", id) + if err != nil { + return nil, err + } + var records []*resolver.Record + for _, addr := range addrs { + address := addr.Target + if addr.Port > 0 { + address = fmt.Sprintf("%s:%d", addr.Target, addr.Port) + } + records = append(records, &resolver.Record{ + Address: address, + }) + } + return records, nil +} diff --git a/network/resolver/resolver.go b/network/resolver/resolver.go new file mode 100644 index 00000000..ba80e124 --- /dev/null +++ b/network/resolver/resolver.go @@ -0,0 +1,12 @@ +// Package resolver resolves network ids to addresses +package resolver + +type Resolver interface { + // Resolve returns a list of addresses for an id + Resolve(id string) ([]*Record, error) +} + +// A resoved id +type Record struct { + Address string +}