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
}