Cleanup and speedup network convergence along with direct messaging for connect and solicit
This commit is contained in:
@@ -86,24 +86,18 @@ func getHeader(hdr string, md map[string]string) string {
|
||||
}
|
||||
|
||||
func getHeaders(m *codec.Message) {
|
||||
get := func(hdr, v string) string {
|
||||
set := func(v, hdr string) string {
|
||||
if len(v) > 0 {
|
||||
return v
|
||||
}
|
||||
|
||||
if hd := m.Header[hdr]; len(hd) > 0 {
|
||||
return hd
|
||||
}
|
||||
|
||||
// old
|
||||
return m.Header["X-"+hdr]
|
||||
return m.Header[hdr]
|
||||
}
|
||||
|
||||
m.Id = get("Micro-Id", m.Id)
|
||||
m.Error = get("Micro-Error", m.Error)
|
||||
m.Endpoint = get("Micro-Endpoint", m.Endpoint)
|
||||
m.Method = get("Micro-Method", m.Method)
|
||||
m.Target = get("Micro-Service", m.Target)
|
||||
m.Id = set(m.Id, "Micro-Id")
|
||||
m.Error = set(m.Error, "Micro-Error")
|
||||
m.Endpoint = set(m.Endpoint, "Micro-Endpoint")
|
||||
m.Method = set(m.Method, "Micro-Method")
|
||||
m.Target = set(m.Target, "Micro-Service")
|
||||
|
||||
// TODO: remove this cruft
|
||||
if len(m.Endpoint) == 0 {
|
||||
@@ -321,7 +315,6 @@ func (c *rpcCodec) Write(r *codec.Message, b interface{}) error {
|
||||
|
||||
// write an error if it failed
|
||||
m.Error = errors.Wrapf(err, "Unable to encode body").Error()
|
||||
m.Header["X-Micro-Error"] = m.Error
|
||||
m.Header["Micro-Error"] = m.Error
|
||||
// no body to write
|
||||
if err := c.codec.Write(m, nil); err != nil {
|
||||
|
||||
@@ -549,6 +549,7 @@ func (s *rpcServer) Register() error {
|
||||
node.Metadata["protocol"] = "mucp"
|
||||
|
||||
s.RLock()
|
||||
|
||||
// Maps are ordered randomly, sort the keys for consistency
|
||||
var handlerList []string
|
||||
for n, e := range s.handlers {
|
||||
@@ -557,6 +558,7 @@ func (s *rpcServer) Register() error {
|
||||
handlerList = append(handlerList, n)
|
||||
}
|
||||
}
|
||||
|
||||
sort.Strings(handlerList)
|
||||
|
||||
var subscriberList []Subscriber
|
||||
@@ -566,18 +568,20 @@ func (s *rpcServer) Register() error {
|
||||
subscriberList = append(subscriberList, e)
|
||||
}
|
||||
}
|
||||
|
||||
sort.Slice(subscriberList, func(i, j int) bool {
|
||||
return subscriberList[i].Topic() > subscriberList[j].Topic()
|
||||
})
|
||||
|
||||
endpoints := make([]*registry.Endpoint, 0, len(handlerList)+len(subscriberList))
|
||||
|
||||
for _, n := range handlerList {
|
||||
endpoints = append(endpoints, s.handlers[n].Endpoints()...)
|
||||
}
|
||||
|
||||
for _, e := range subscriberList {
|
||||
endpoints = append(endpoints, e.Endpoints()...)
|
||||
}
|
||||
s.RUnlock()
|
||||
|
||||
service := ®istry.Service{
|
||||
Name: config.Name,
|
||||
@@ -586,9 +590,10 @@ func (s *rpcServer) Register() error {
|
||||
Endpoints: endpoints,
|
||||
}
|
||||
|
||||
s.Lock()
|
||||
// get registered value
|
||||
registered := s.registered
|
||||
s.Unlock()
|
||||
|
||||
s.RUnlock()
|
||||
|
||||
if !registered {
|
||||
log.Logf("Registry [%s] Registering node: %s", config.Registry.String(), node.Id)
|
||||
@@ -610,6 +615,8 @@ func (s *rpcServer) Register() error {
|
||||
defer s.Unlock()
|
||||
|
||||
s.registered = true
|
||||
// set what we're advertising
|
||||
s.opts.Advertise = addr
|
||||
|
||||
// subscribe to the topic with own name
|
||||
sub, err := s.opts.Broker.Subscribe(config.Name, s.HandleEvent)
|
||||
|
||||
Reference in New Issue
Block a user