You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
907 B
50 lines
907 B
package service |
|
|
|
import ( |
|
"context" |
|
"os" |
|
"sync" |
|
|
|
"go-common/app/infra/discovery/conf" |
|
"go-common/app/infra/discovery/dao" |
|
bm "go-common/library/net/http/blademaster" |
|
) |
|
|
|
// Service discovery main service |
|
type Service struct { |
|
c *conf.Config |
|
client *bm.Client |
|
registry *dao.Registry |
|
nodes *dao.Nodes |
|
tLock sync.RWMutex |
|
tree map[int64]string // treeid->appid |
|
env *env |
|
} |
|
|
|
type env struct { |
|
Region string |
|
Zone string |
|
} |
|
|
|
// New get a discovery service |
|
func New(c *conf.Config) (s *Service, cancel context.CancelFunc) { |
|
s = &Service{ |
|
c: c, |
|
client: bm.NewClient(c.HTTPClient), |
|
registry: dao.NewRegistry(), |
|
nodes: dao.NewNodes(c), |
|
tree: make(map[int64]string), |
|
} |
|
s.getEnv() |
|
s.syncUp() |
|
cancel = s.regSelf() |
|
go s.nodesproc() |
|
return |
|
} |
|
|
|
func (s *Service) getEnv() { |
|
s.env = &env{ |
|
Region: os.Getenv("REGION"), |
|
Zone: os.Getenv("ZONE"), |
|
} |
|
}
|
|
|