| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package common
- import (
- "bet24.com/log"
- cclient "github.com/rpcxio/rpcx-consul/client"
- "github.com/smallnest/rpcx/client"
- //"runtime/debug"
- "sync"
- )
- type discoveryinfo struct {
- discovery client.ServiceDiscovery
- //plugin client.Plugin
- }
- type discoverypool struct {
- clients map[string]*discoveryinfo
- lock *sync.RWMutex
- }
- var discovery_mgr *discoverypool
- func getDiscoveryMgr() *discoverypool {
- if discovery_mgr == nil {
- discovery_mgr = new(discoverypool)
- discovery_mgr.ctor()
- }
- return discovery_mgr
- }
- func getDiscovery(serviceName string, consulAddr string) client.ServiceDiscovery {
- ret := getDiscoveryMgr().getDiscovery(serviceName, consulAddr)
- if ret == nil {
- return nil
- }
- return ret.discovery
- }
- func (dm *discoverypool) ctor() {
- dm.clients = make(map[string]*discoveryinfo)
- dm.lock = &sync.RWMutex{}
- }
- func (dm *discoverypool) getDiscovery(serviceName string, consulAddr string) *discoveryinfo {
- dm.lock.Lock()
- defer dm.lock.Unlock()
- ret, ok := dm.clients[serviceName]
- if !ok || ret == nil {
- ret = dm.openConnection(serviceName, consulAddr)
- dm.clients[serviceName] = ret
- }
- return ret
- }
- func (dm *discoverypool) openConnection(serviceName, consulAddr string) *discoveryinfo {
- d, err := cclient.NewConsulDiscovery(Service_base_path, serviceName, []string{consulAddr}, nil)
- if err != nil {
- if d != nil {
- d.Close()
- }
- log.Release("discoverypool.openConnection [%s] [%s] failed", serviceName, consulAddr)
- return nil
- }
- log.Debug("discoverypool openConnection %s", serviceName)
- //log.Debug("%s", debug.Stack())
- return &discoveryinfo{discovery: d}
- }
|