Files
hk4e/air/service/registry_service.go
2022-11-20 15:38:00 +08:00

104 lines
3.2 KiB
Go

package service
import (
"air/entity"
"flswld.com/common/utils/object"
"time"
)
// 注册HTTP服务
func (s *Service) RegisterHttpService(instance entity.Instance) bool {
nowTime := time.Now().Unix()
s.httpServiceMapLock.Lock()
instanceMap := s.httpServiceMap[instance.ServiceName]
if instanceMap == nil {
instanceMap = new(InstanceMap)
instanceMap.Imap = make(map[string]*InstanceData)
}
instanceMap.lock.Lock()
instanceData := instanceMap.Imap[instance.InstanceName]
if instanceData == nil {
instanceData = new(InstanceData)
}
instanceData.Address = instance.InstanceAddr
instanceData.LastAliveTime = nowTime
instanceMap.Imap[instance.InstanceName] = instanceData
s.httpServiceMap[instance.ServiceName] = instanceMap
instanceMap.lock.Unlock()
s.httpServiceMapLock.Unlock()
changeInst := make(map[string]*InstanceMap)
instanceMapCopy := new(InstanceMap)
instanceMap.lock.RLock()
_ = object.ObjectDeepCopy(instanceMap, instanceMapCopy)
instanceMap.lock.RUnlock()
changeInst[instance.ServiceName] = instanceMapCopy
s.httpSvcChgNtfCh <- changeInst
return true
}
// 取消注册HTTP服务
func (s *Service) CancelHttpService(instance entity.Instance) bool {
s.httpServiceMapLock.RLock()
instanceMap := s.httpServiceMap[instance.ServiceName]
s.httpServiceMapLock.RUnlock()
instanceMap.lock.Lock()
delete(instanceMap.Imap, instance.InstanceName)
instanceMap.lock.Unlock()
changeInst := make(map[string]*InstanceMap)
instanceMapCopy := new(InstanceMap)
instanceMap.lock.RLock()
_ = object.ObjectDeepCopy(instanceMap, instanceMapCopy)
instanceMap.lock.RUnlock()
changeInst[instance.ServiceName] = instanceMapCopy
s.httpSvcChgNtfCh <- changeInst
return true
}
// 注册RPC服务
func (s *Service) RegisterRpcService(instance entity.Instance) bool {
nowTime := time.Now().Unix()
s.rpcServiceMapLock.Lock()
instanceMap := s.rpcServiceMap[instance.ServiceName]
if instanceMap == nil {
instanceMap = new(InstanceMap)
instanceMap.Imap = make(map[string]*InstanceData)
}
instanceMap.lock.Lock()
instanceData := instanceMap.Imap[instance.InstanceName]
if instanceData == nil {
instanceData = new(InstanceData)
}
instanceData.Address = instance.InstanceAddr
instanceData.LastAliveTime = nowTime
instanceMap.Imap[instance.InstanceName] = instanceData
s.rpcServiceMap[instance.ServiceName] = instanceMap
instanceMap.lock.Unlock()
s.rpcServiceMapLock.Unlock()
changeInst := make(map[string]*InstanceMap)
instanceMapCopy := new(InstanceMap)
instanceMap.lock.RLock()
_ = object.ObjectDeepCopy(instanceMap, instanceMapCopy)
instanceMap.lock.RUnlock()
changeInst[instance.ServiceName] = instanceMapCopy
s.rpcSvcChgNtfCh <- changeInst
return true
}
// 取消注册RPC服务
func (s *Service) CancelRpcService(instance entity.Instance) bool {
s.rpcServiceMapLock.RLock()
instanceMap := s.rpcServiceMap[instance.ServiceName]
s.rpcServiceMapLock.RUnlock()
instanceMap.lock.Lock()
delete(instanceMap.Imap, instance.InstanceName)
instanceMap.lock.Unlock()
changeInst := make(map[string]*InstanceMap)
instanceMapCopy := new(InstanceMap)
instanceMap.lock.RLock()
_ = object.ObjectDeepCopy(instanceMap, instanceMapCopy)
instanceMap.lock.RUnlock()
changeInst[instance.ServiceName] = instanceMapCopy
s.rpcSvcChgNtfCh <- changeInst
return true
}