func()

in pkg/adapter/dubboregistry/registry/nacos/interface_listener.go [145:190]


func (n *nacosIntfListener) updateServiceList(serviceList []string) error {
	// add new service info and watch
	newServiceMap := make(map[string]struct{})

	for _, v := range serviceList {
		svcInfo := fromServiceFullKey(v)
		if svcInfo == nil {
			// invalid nacos dubbo service key
			continue
		}
		key := svcInfo.String()
		newServiceMap[key] = struct{}{}
		if _, ok := n.serviceInfoMap[key]; !ok {
			url, _ := dubboCommon.NewURL("mock://localhost:8848")
			url.SetParam(constant.InterfaceKey, svcInfo.interfaceName)
			url.SetParam(constant.GroupKey, svcInfo.group)
			url.SetParam(constant.VersionKey, svcInfo.version)
			l := newNacosSrvListener(url, n.client, n.adapterListener)
			l.wg.Add(1)

			svcInfo.listener = l
			n.serviceInfoMap[key] = svcInfo

			sub := &vo.SubscribeParam{
				ServiceName:       getSubscribeName(url),
				SubscribeCallback: l.Callback,
				GroupName:         n.regConf.Group,
			}

			if err := n.client.Subscribe(sub); err != nil {
				logger.Errorf("subscribe listener with interfaceKey = %s, error = %s", l, err)
			}
			l.wg.Done()
		}
	}

	// handle deleted service
	for k, v := range n.serviceInfoMap {
		if _, ok := newServiceMap[k]; !ok {
			delete(n.serviceInfoMap, k)
			v.listener.Close()
		}
	}

	return nil
}