From 3f52ea83312c9d1ab556d9a0aa59d10d5e0b57e6 Mon Sep 17 00:00:00 2001 From: duanhf2012 <6549168@qq.com> Date: Fri, 22 Sep 2023 15:43:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=AD=9B=E9=80=89=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=8F=91=E7=8E=B0---=E6=94=AF=E6=8C=81=E5=AF=B9?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E4=B8=BBmaster=E7=BB=93=E7=82=B9=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cluster/cluster.go | 8 +++- cluster/dynamicdiscovery.go | 79 +++++++++++++++++-------------------- 2 files changed, 42 insertions(+), 45 deletions(-) diff --git a/cluster/cluster.go b/cluster/cluster.go index c5b0517..5bc3a19 100644 --- a/cluster/cluster.go +++ b/cluster/cluster.go @@ -20,6 +20,11 @@ const ( Discard NodeStatus = 1 //丢弃 ) +type MasterDiscoveryService struct { + MasterNodeId int32 //要筛选的主结点Id,如果不配置或者配置成0,表示针对所有的主结点 + DiscoveryService []string //只发现的服务列表 +} + type NodeInfo struct { NodeId int NodeName string @@ -29,8 +34,7 @@ type NodeInfo struct { CompressBytesLen int //超过字节进行压缩的长度 ServiceList []string //所有的有序服务列表 PublicServiceList []string //对外公开的服务列表 - DiscoveryService []string //筛选发现的服务,如果不配置,不进行筛选 - NeighborService []string + MasterDiscoveryService []MasterDiscoveryService //筛选发现的服务,如果不配置,不进行筛选 status NodeStatus } diff --git a/cluster/dynamicdiscovery.go b/cluster/dynamicdiscovery.go index dbe8f19..3e7495d 100644 --- a/cluster/dynamicdiscovery.go +++ b/cluster/dynamicdiscovery.go @@ -248,15 +248,6 @@ func (dc *DynamicDiscoveryClient) fullCompareDiffNode(masterNodeId int32, mapNod //订阅发现的服务通知 func (dc *DynamicDiscoveryClient) RPC_SubServiceDiscover(req *rpc.SubscribeDiscoverNotify) error { - //整理当前master结点需要筛选的NeighborService - masterDiscoveryNodeInfo := cluster.GetMasterDiscoveryNodeInfo(int(req.MasterNodeId)) - mapMasterDiscoveryService := map[string]struct{}{} - if masterDiscoveryNodeInfo != nil { - for i := 0; i < len(masterDiscoveryNodeInfo.NeighborService); i++ { - mapMasterDiscoveryService[masterDiscoveryNodeInfo.NeighborService[i]] = struct{}{} - } - } - mapNodeInfo := map[int32]*rpc.NodeInfo{} for _, nodeInfo := range req.NodeInfo { //不对本地结点或者不存在任何公开服务的结点 @@ -271,13 +262,6 @@ func (dc *DynamicDiscoveryClient) RPC_SubServiceDiscover(req *rpc.SubscribeDisco //遍历所有的公开服务,并筛选之 for _, serviceName := range nodeInfo.PublicServiceList { - //只有存在配置时才做筛选 - if len(mapMasterDiscoveryService) > 0 { - if _, ok := mapMasterDiscoveryService[serviceName]; ok == false { - continue - } - } - nInfo := mapNodeInfo[nodeInfo.NodeId] if nInfo == nil { nInfo = &rpc.NodeInfo{} @@ -319,10 +303,8 @@ func (dc *DynamicDiscoveryClient) RPC_SubServiceDiscover(req *rpc.SubscribeDisco //设置新结点 for _, nodeInfo := range mapNodeInfo { - dc.addMasterNode(req.MasterNodeId, nodeInfo.NodeId) - dc.setNodeInfo(nodeInfo) - - if len(nodeInfo.PublicServiceList) == 0 { + bSet := dc.setNodeInfo(req.MasterNodeId,nodeInfo) + if bSet == false { continue } @@ -358,13 +340,8 @@ func (dc *DynamicDiscoveryClient) regServiceDiscover(nodeId int){ req.NodeInfo.NodeName = cluster.localNodeInfo.NodeName req.NodeInfo.ListenAddr = cluster.localNodeInfo.ListenAddr req.NodeInfo.MaxRpcParamLen = cluster.localNodeInfo.MaxRpcParamLen + req.NodeInfo.PublicServiceList = cluster.localNodeInfo.PublicServiceList - //MasterDiscoveryNode配置中没有配置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, RegServiceDiscover, &req, func(res *rpc.Empty, err error) { @@ -382,37 +359,53 @@ func (dc *DynamicDiscoveryClient) regServiceDiscover(nodeId int){ } } -func (dc *DynamicDiscoveryClient) setNodeInfo(nodeInfo *rpc.NodeInfo) { - if nodeInfo == nil || nodeInfo.Private == true || int(nodeInfo.NodeId) == dc.localNodeId { - return - } +func (dc *DynamicDiscoveryClient) canDiscoveryService(fromMasterNodeId int32,serviceName string) bool{ + canDiscovery := true - //筛选关注的服务 - localNodeInfo := cluster.GetLocalNodeInfo() - if len(localNodeInfo.DiscoveryService) > 0 { - var discoverServiceSlice = make([]string, 0, 24) - for _, pubService := range nodeInfo.PublicServiceList { - for _, discoverService := range localNodeInfo.DiscoveryService { - if pubService == discoverService { - discoverServiceSlice = append(discoverServiceSlice, pubService) + for i:=0;i