fix registry addr error for mq-rpc

This commit is contained in:
Shu Xian 2019-08-14 21:32:28 +08:00
parent dc0fbfc3c0
commit bf0e46dc0d
3 changed files with 17 additions and 7 deletions

View File

@ -13,6 +13,7 @@ import (
consul "github.com/hashicorp/consul/api" consul "github.com/hashicorp/consul/api"
"github.com/micro/go-micro/registry" "github.com/micro/go-micro/registry"
mnet "github.com/micro/go-micro/util/net"
hash "github.com/mitchellh/hashstructure" hash "github.com/mitchellh/hashstructure"
) )
@ -250,6 +251,9 @@ func (c *consulRegistry) Register(s *registry.Service, opts ...registry.Register
} }
host, pt, _ := net.SplitHostPort(node.Address) host, pt, _ := net.SplitHostPort(node.Address)
if host == "" {
host = node.Address
}
port, _ := strconv.Atoi(pt) port, _ := strconv.Atoi(pt)
// register the service // register the service
@ -351,7 +355,7 @@ func (c *consulRegistry) GetService(name string) ([]*registry.Service, error) {
svc.Nodes = append(svc.Nodes, &registry.Node{ svc.Nodes = append(svc.Nodes, &registry.Node{
Id: id, Id: id,
Address: fmt.Sprintf("%s:%d", address, s.Service.Port), Address: mnet.HostPort(address, s.Service.Port),
Metadata: decodeMetadata(s.Service.Tags), Metadata: decodeMetadata(s.Service.Tags),
}) })
} }

View File

@ -316,10 +316,15 @@ func (s *rpcServer) Register() error {
md[k] = v md[k] = v
} }
// mq-rpc(eg. nats) doesn't need the port. its addr is queue name.
if port != "" {
addr = mnet.HostPort(addr, port)
}
// register service // register service
node := &registry.Node{ node := &registry.Node{
Id: config.Name + "-" + config.Id, Id: config.Name + "-" + config.Id,
Address: mnet.HostPort(addr, port), Address: addr,
Metadata: md, Metadata: md,
} }

View File

@ -14,12 +14,13 @@ func HostPort(addr string, port interface{}) string {
if strings.Count(addr, ":") > 0 { if strings.Count(addr, ":") > 0 {
host = fmt.Sprintf("[%s]", addr) host = fmt.Sprintf("[%s]", addr)
} }
// TODO check for NATS case // when port is blank or 0, host is a queue name
if v, ok := port.(string); ok { if v, ok := port.(string); ok && v == "" {
if v == "" { return host
return fmt.Sprintf("%s", host) } else if v, ok := port.(int); ok && v == 0 && net.ParseIP(host) == nil {
} return host
} }
return fmt.Sprintf("%s:%v", host, port) return fmt.Sprintf("%s:%v", host, port)
} }