public void notify()

in dubbo-xds/src/main/java/org/apache/dubbo/rpc/cluster/router/xds/XdsRouter.java [227:263]


    public void notify(BitList<Invoker<T>> invokers) {
        BitList<Invoker<T>> invokerList = invokers == null ? BitList.emptyList() : invokers;
        currentInvokeList = invokerList.clone();

        // compute need subscribe/unsubscribe rds application
        Set<String> currentApplications = new HashSet<>();
        for (Invoker<T> invoker : invokerList) {
            String applicationName = invoker.getUrl().getRemoteApplication();
            if (StringUtils.isNotEmpty(applicationName)) {
                currentApplications.add(applicationName);
            }
        }

        if (!subscribeApplications.equals(currentApplications)) {
            synchronized (this) {
                for (String currentApplication : currentApplications) {
                    if (!subscribeApplications.contains(currentApplication)) {
                        rdsRouteRuleManager.subscribeRds(currentApplication, this);
                    }
                }
                for (String preApplication : subscribeApplications) {
                    if (!currentApplications.contains(preApplication)) {
                        rdsRouteRuleManager.unSubscribeRds(preApplication, this);
                    }
                }
                subscribeApplications = currentApplications;
            }
        }

        // update subset
        synchronized (this) {
            BitList<Invoker<T>> allInvokers = currentInvokeList.clone();
            for (DestinationSubset<T> subset : destinationSubsetMap.values()) {
                computeSubset(subset, allInvokers);
            }
        }
    }