mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
增加邻居master服务发现功能
This commit is contained in:
@@ -27,6 +27,7 @@ type NodeInfo struct {
|
||||
ServiceList []string //所有的服务列表
|
||||
PublicServiceList []string //对外公开的服务列表
|
||||
DiscoveryService []string //筛选发现的服务,如果不配置,不进行筛选
|
||||
NeighborService []string
|
||||
status NodeStatus
|
||||
}
|
||||
|
||||
@@ -37,8 +38,8 @@ type NodeRpcInfo struct {
|
||||
|
||||
var cluster Cluster
|
||||
type Cluster struct {
|
||||
localNodeInfo NodeInfo //本结点配置信息
|
||||
discoveryNodeList []NodeInfo //配置发现Master结点
|
||||
localNodeInfo NodeInfo //本结点配置信息
|
||||
masterDiscoveryNodeList []NodeInfo //配置发现Master结点
|
||||
|
||||
localServiceCfg map[string]interface{} //map[serviceName]配置数据*
|
||||
mapRpc map[int] NodeRpcInfo //nodeId
|
||||
@@ -84,6 +85,10 @@ func (cls *Cluster) DiscardNode(nodeId int){
|
||||
}
|
||||
|
||||
func (cls *Cluster) DelNode(nodeId int,immediately bool){
|
||||
//不删除
|
||||
if cls.GetMasterDiscoveryNodeInfo(nodeId)!=nil || nodeId == cls.localNodeInfo.NodeId {
|
||||
return
|
||||
}
|
||||
cls.locker.Lock()
|
||||
nodeInfo,ok := cls.mapIdNode[nodeId]
|
||||
if ok == false {
|
||||
@@ -104,6 +109,7 @@ func (cls *Cluster) DelNode(nodeId int,immediately bool){
|
||||
nodeInfo.status = Discard
|
||||
rpc.client.Unlock()
|
||||
cls.locker.Unlock()
|
||||
log.Release("Discard node %d %s",nodeInfo.NodeId,nodeInfo.ListenAddr)
|
||||
return
|
||||
}
|
||||
rpc.client.Unlock()
|
||||
@@ -120,6 +126,8 @@ func (cls *Cluster) DelNode(nodeId int,immediately bool){
|
||||
if ok == true {
|
||||
rpc.client.Close(false)
|
||||
}
|
||||
|
||||
log.Release("remove node %d %s",nodeInfo.NodeId,nodeInfo.ListenAddr)
|
||||
}
|
||||
|
||||
func (cls *Cluster) serviceDiscoveryDelNode (nodeId int,immediately bool){
|
||||
@@ -175,7 +183,8 @@ func (cls *Cluster) serviceDiscoverySetNodeInfo (nodeInfo *NodeInfo){
|
||||
}
|
||||
cls.mapIdNode[nodeInfo.NodeId] = *nodeInfo
|
||||
|
||||
log.Debug("Discovery nodeId: %d discovery service:%+v",nodeInfo.NodeId,nodeInfo.PublicServiceList)
|
||||
log.Release("Discovery nodeId: %d services:%+v",nodeInfo.NodeId,nodeInfo.PublicServiceList)
|
||||
|
||||
//已经存在连接,则不需要进行设置
|
||||
if _,rpcInfoOK := cls.mapRpc[nodeInfo.NodeId];rpcInfoOK == true {
|
||||
return
|
||||
@@ -226,7 +235,7 @@ func (cls *Cluster) checkDynamicDiscovery(localNodeId int) (bool,bool){
|
||||
var hasMaster bool //是否配置Master服务
|
||||
|
||||
//遍历所有结点
|
||||
for _,nodeInfo := range cls.discoveryNodeList{
|
||||
for _,nodeInfo := range cls.masterDiscoveryNodeList{
|
||||
if nodeInfo.NodeId == localNodeId {
|
||||
localMaster = true
|
||||
}
|
||||
@@ -237,8 +246,12 @@ func (cls *Cluster) checkDynamicDiscovery(localNodeId int) (bool,bool){
|
||||
return localMaster,hasMaster
|
||||
}
|
||||
|
||||
func (cls *Cluster) appendService(serviceName string){
|
||||
func (cls *Cluster) appendService(serviceName string,bPublicService bool){
|
||||
cls.localNodeInfo.ServiceList = append(cls.localNodeInfo.ServiceList,serviceName)
|
||||
if bPublicService {
|
||||
cls.localNodeInfo.PublicServiceList = append(cls.localNodeInfo.PublicServiceList,serviceName)
|
||||
}
|
||||
|
||||
if _,ok:=cls.mapServiceNode[serviceName];ok==false {
|
||||
cls.mapServiceNode[serviceName] = map[int]struct{}{}
|
||||
}
|
||||
@@ -246,7 +259,17 @@ func (cls *Cluster) appendService(serviceName string){
|
||||
}
|
||||
|
||||
func (cls *Cluster) GetDiscoveryNodeList() []NodeInfo{
|
||||
return cls.discoveryNodeList
|
||||
return cls.masterDiscoveryNodeList
|
||||
}
|
||||
|
||||
func (cls *Cluster) GetMasterDiscoveryNodeInfo(nodeId int) *NodeInfo{
|
||||
for i:=0;i<len(cls.masterDiscoveryNodeList);i++{
|
||||
if cls.masterDiscoveryNodeList[i].NodeId == nodeId {
|
||||
return &cls.masterDiscoveryNodeList[i]
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cls *Cluster) SetupServiceDiscovery(localNodeId int,setupServiceFun SetupServiceFun) {
|
||||
@@ -265,9 +288,9 @@ func (cls *Cluster) SetupServiceDiscovery(localNodeId int,setupServiceFun SetupS
|
||||
//2.如果为动态服务发现安装本地发现服务
|
||||
cls.serviceDiscovery = getDynamicDiscovery()
|
||||
if localMaster == true {
|
||||
cls.appendService(DynamicDiscoveryMasterName)
|
||||
cls.appendService(DynamicDiscoveryMasterName,false)
|
||||
}
|
||||
cls.appendService(DynamicDiscoveryClientName)
|
||||
cls.appendService(DynamicDiscoveryClientName,true)
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user