From d6a5ff432cf3df2db63a00e28d1875c86138e843 Mon Sep 17 00:00:00 2001 From: Asim Aslam Date: Mon, 7 Jan 2019 09:34:07 +0000 Subject: [PATCH] add net.LookupHost for dns --- selector/dns/dns.go | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/selector/dns/dns.go b/selector/dns/dns.go index 05f493cc..d3882ac1 100644 --- a/selector/dns/dns.go +++ b/selector/dns/dns.go @@ -3,6 +3,7 @@ package dns import ( "net" + "strconv" "github.com/micro/go-micro/registry" "github.com/micro/go-micro/selector" @@ -29,9 +30,36 @@ func (d *dnsSelector) Options() selector.Options { } func (d *dnsSelector) Select(service string, opts ...selector.SelectOption) (selector.Next, error) { - _, srv, err := net.LookupSRV(service, "tcp", d.domain) + var srv []*net.SRV + + // check if its host:port + host, port, err := net.SplitHostPort(service) + // not host:port if err != nil { - return nil, err + // lookup the SRV record + _, srvs, err := net.LookupSRV(service, "tcp", d.domain) + if err != nil { + return nil, err + } + // set SRV records + srv = srvs + // got host:port + } else { + p, _ := strconv.Atoi(port) + + // lookup the A record + ips, err := net.LookupHost(host) + if err != nil { + return nil, err + } + + // create SRV records + for _, ip := range ips { + srv = append(srv, &net.SRV{ + Target: ip, + Port: uint16(p), + }) + } } var nodes []*registry.Node