Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: unistack-org/micro
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v3.3.3
Choose a base ref
...
head repository: unistack-org/micro
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v3.3.4
Choose a head ref
  • 2 commits
  • 3 files changed
  • 1 contributor

Commits on Mar 26, 2021

  1. router: use dns as default router

    Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
    vtolstov committed Mar 26, 2021
    Copy the full SHA
    8db55d2 View commit details
  2. client: use router.DefaultRouter in NewOptions helper

    Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
    vtolstov committed Mar 26, 2021
    Copy the full SHA
    e13c2c4 View commit details
Showing with 102 additions and 9 deletions.
  1. +10 −8 client/options.go
  2. +91 −0 router/dns.go
  3. +1 −1 router/router.go
18 changes: 10 additions & 8 deletions client/options.go
Original file line number Diff line number Diff line change
@@ -170,14 +170,16 @@ func NewOptions(opts ...Option) Options {
RequestTimeout: DefaultRequestTimeout,
DialTimeout: transport.DefaultDialTimeout,
},
Lookup: LookupRoute,
PoolSize: DefaultPoolSize,
PoolTTL: DefaultPoolTTL,
Selector: random.NewSelector(),
Logger: logger.DefaultLogger,
Broker: broker.DefaultBroker,
Meter: meter.DefaultMeter,
Tracer: tracer.DefaultTracer,
Lookup: LookupRoute,
PoolSize: DefaultPoolSize,
PoolTTL: DefaultPoolTTL,
Selector: random.NewSelector(),
Logger: logger.DefaultLogger,
Broker: broker.DefaultBroker,
Meter: meter.DefaultMeter,
Tracer: tracer.DefaultTracer,
Router: router.DefaultRouter,
Transport: transport.DefaultTransport,
}

for _, o := range opts {
91 changes: 91 additions & 0 deletions router/dns.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package router

import (
"fmt"
"net"
"strconv"
)

// NewRouter returns an initialized dns router
func NewRouter(opts ...Option) Router {
options := NewOptions(opts...)
return &dns{options}
}

type dns struct {
options Options
}

func (d *dns) Init(opts ...Option) error {
for _, o := range opts {
o(&d.options)
}
return nil
}

func (d *dns) Options() Options {
return d.options
}

func (d *dns) Table() Table {
return nil
}

func (d *dns) Close() error {
return nil
}

func (d *dns) Lookup(opts ...QueryOption) ([]Route, error) {
options := NewQuery(opts...)
// check to see if we have the port provided in the service, e.g. go-micro-srv-foo:8000
host, port, err := net.SplitHostPort(options.Service)
if err == nil {
// lookup the service using A records
ips, err := net.LookupHost(host)
if err != nil {
return nil, err
}

p, _ := strconv.Atoi(port)

// convert the ip addresses to routes
result := make([]Route, len(ips))
for i, ip := range ips {
result[i] = Route{
Service: options.Service,
Address: fmt.Sprintf("%s:%d", ip, uint16(p)),
}
}
return result, nil
}

// we didn't get the port so we'll lookup the service using SRV records. If we can't lookup the
// service using the SRV record, we return the error.
_, nodes, err := net.LookupSRV(options.Service, "tcp", d.options.Network)
if err != nil {
return nil, err
}

// convert the nodes (net services) to routes
result := make([]Route, len(nodes))
for i, n := range nodes {
result[i] = Route{
Service: options.Service,
Address: fmt.Sprintf("%s:%d", n.Target, n.Port),
Network: d.options.Network,
}
}
return result, nil
}

func (d *dns) Watch(opts ...WatchOption) (Watcher, error) {
return nil, nil
}

func (d *dns) Name() string {
return d.options.Name
}

func (d *dns) String() string {
return "dns"
}
2 changes: 1 addition & 1 deletion router/router.go
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@ import (

var (
// DefaultRouter is the global default router
DefaultRouter Router
DefaultRouter Router = NewRouter()
// DefaultNetwork is default micro network
DefaultNetwork = "micro"
// ErrRouteNotFound is returned when no route was found in the routing table