1.优化CALL Rpc错误返回

2.优化不同邻居Master服务发现规则
This commit is contained in:
boyce
2021-05-07 17:47:49 +08:00
parent 212798dc04
commit 806e4040db
3 changed files with 40 additions and 12 deletions

View File

@@ -150,6 +150,7 @@ func (cls *Cluster) delServiceNode(serviceName string,nodeId int){
}
}
func (cls *Cluster) serviceDiscoverySetNodeInfo (nodeInfo *NodeInfo){
//本地结点不加入
if nodeInfo.NodeId == cls.localNodeInfo.NodeId {
@@ -272,6 +273,10 @@ func (cls *Cluster) GetMasterDiscoveryNodeInfo(nodeId int) *NodeInfo{
return nil
}
func (cls *Cluster) IsMasterDiscoveryNode() bool{
return cls.GetMasterDiscoveryNodeInfo(cls.GetLocalNodeInfo().NodeId)!=nil
}
func (cls *Cluster) SetupServiceDiscovery(localNodeId int,setupServiceFun SetupServiceFun) {
if cls.serviceDiscovery!=nil {
return

View File

@@ -12,8 +12,10 @@ const maxTryCount = 30 //最大重试次数
const perTrySecond = 2*time.Second //每次重试间隔2秒
const DynamicDiscoveryMasterName = "DiscoveryMaster"
const DynamicDiscoveryClientName = "DiscoveryClient"
const DynamicDiscoveryMasterNameRpcMethod = DynamicDiscoveryMasterName+".RPC_RegServiceDiscover"
const DynamicDiscoveryClientNameRpcMethod = DynamicDiscoveryClientName+".RPC_SubServiceDiscover"
const RegServiceDiscover = DynamicDiscoveryMasterName+".RPC_RegServiceDiscover"
const SubServiceDiscover = DynamicDiscoveryClientName+".RPC_SubServiceDiscover"
const AddSubServiceDiscover = DynamicDiscoveryMasterName+".RPC_AddSubServiceDiscover"
type DynamicDiscoveryMaster struct {
service.Service
@@ -43,6 +45,10 @@ func init(){
}
func (ds *DynamicDiscoveryMaster) addNodeInfo(nodeInfo *rpc.NodeInfo){
if len(nodeInfo.PublicServiceList)==0 {
return
}
_,ok := ds.mapNodeInfo[nodeInfo.NodeId]
if ok == true {
return
@@ -51,6 +57,11 @@ func (ds *DynamicDiscoveryMaster) addNodeInfo(nodeInfo *rpc.NodeInfo){
ds.nodeInfo = append(ds.nodeInfo,nodeInfo)
}
func (ds *DynamicDiscoveryMaster) RPC_AddSubServiceDiscover(nodeInfo *rpc.NodeInfo,ret *rpc.Empty) error{
ds.addNodeInfo(nodeInfo)
return nil
}
func (ds *DynamicDiscoveryMaster) OnInit() error{
ds.mapNodeInfo = make(map[int32] struct{},20)
ds.RegRpcListener(ds)
@@ -79,7 +90,7 @@ func (ds *DynamicDiscoveryMaster) OnNodeConnected(nodeId int){
notifyDiscover.IsFull = true
notifyDiscover.NodeInfo = ds.nodeInfo
notifyDiscover.MasterNodeId = int32(cluster.GetLocalNodeInfo().NodeId)
ds.GoNode(nodeId,DynamicDiscoveryClientNameRpcMethod,&notifyDiscover)
ds.GoNode(nodeId,SubServiceDiscover,&notifyDiscover)
}
func (ds *DynamicDiscoveryMaster) OnNodeDisconnect(nodeId int){
@@ -88,7 +99,7 @@ func (ds *DynamicDiscoveryMaster) OnNodeDisconnect(nodeId int){
notifyDiscover.DelNodeId = int32(nodeId)
//删除结点
cluster.DelNode(nodeId,true)
ds.CastGo(DynamicDiscoveryClientNameRpcMethod,&notifyDiscover)
ds.CastGo(SubServiceDiscover,&notifyDiscover)
}
// 收到注册过来的结点
@@ -104,7 +115,7 @@ func (ds *DynamicDiscoveryMaster) RPC_RegServiceDiscover(req *rpc.ServiceDiscove
var notifyDiscover rpc.SubscribeDiscoverNotify
notifyDiscover.MasterNodeId = int32(cluster.GetLocalNodeInfo().NodeId)
notifyDiscover.NodeInfo = append(notifyDiscover.NodeInfo,req.NodeInfo)
ds.CastGo(DynamicDiscoveryClientNameRpcMethod,&notifyDiscover)
ds.CastGo(SubServiceDiscover,&notifyDiscover)
//存入本地
ds.addNodeInfo(req.NodeInfo)
@@ -145,7 +156,6 @@ func (dc *DynamicDiscoveryClient) addDiscoveryMaster(){
continue
}
dc.funSetService(&discoveryNodeList[i])
//cluster.serviceDiscoverySetNodeInfo(&discoveryNodeList[i])
}
}
@@ -218,11 +228,14 @@ func (dc *DynamicDiscoveryClient) RPC_SubServiceDiscover(req *rpc.SubscribeDisco
}
}
//设置新结点
for _, nodeInfo := range mapNodeInfo {
dc.setNodeInfo(nodeInfo)
}
return nil
}
@@ -250,17 +263,19 @@ func (dc *DynamicDiscoveryClient) OnNodeConnected(nodeId int) {
//DiscoveryNode配置中没有配置NeighborService则同步当前结点所有服务
if len(nodeInfo.NeighborService)==0{
req.NodeInfo.PublicServiceList = cluster.localNodeInfo.PublicServiceList
}else{
req.NodeInfo.PublicServiceList = append(req.NodeInfo.PublicServiceList,DynamicDiscoveryClientName)
}
//向Master服务同步本Node服务信息
err := dc.AsyncCallNode(nodeId, DynamicDiscoveryMasterNameRpcMethod, &req, func(res *rpc.Empty, err error) {
err := dc.AsyncCallNode(nodeId, RegServiceDiscover, &req, func(res *rpc.Empty, err error) {
if err != nil {
log.Error("call %s is fail :%s", DynamicDiscoveryMasterNameRpcMethod, err.Error())
log.Error("call %s is fail :%s", RegServiceDiscover, err.Error())
return
}
})
if err != nil {
log.Error("call %s is fail :%s", DynamicDiscoveryMasterNameRpcMethod, err.Error())
log.Error("call %s is fail :%s", RegServiceDiscover, err.Error())
}
}
@@ -287,6 +302,11 @@ func (dc *DynamicDiscoveryClient) setNodeInfo(nodeInfo *rpc.NodeInfo){
return
}
if cluster.IsMasterDiscoveryNode() {
var ret rpc.Empty
dc.Call(AddSubServiceDiscover,nodeInfo,&ret)
}
var nInfo NodeInfo
nInfo.ServiceList = nodeInfo.PublicServiceList
nInfo.PublicServiceList = nodeInfo.PublicServiceList