public synchronized void post()

in dubbo-cluster-extensions/dubbo-cluster-router-mesh/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/util/MeshRuleDispatcher.java [43:77]


    public synchronized void post(Map<String, List<Map<String, Object>>> ruleMap) {
        if (ruleMap.isEmpty()) {
            // clear rule
            for (Map.Entry<String, Set<MeshRuleListener>> entry : listenerMap.entrySet()) {
                for (MeshRuleListener listener : entry.getValue()) {
                    listener.clearRule(appName);
                }
            }
        } else {
            for (Map.Entry<String, List<Map<String, Object>>> entry : ruleMap.entrySet()) {
                String ruleType = entry.getKey();
                Set<MeshRuleListener> listeners = listenerMap.get(ruleType);
                if (CollectionUtils.isNotEmpty(listeners)) {
                    for (MeshRuleListener listener : listeners) {
                        listener.onRuleChange(appName, entry.getValue());
                    }
                } else {
                    logger.warn(
                            CLUSTER_NO_RULE_LISTENER,
                            "Receive mesh rule but none of listener has been registered",
                            "",
                            "Receive rule but none of listener has been registered. Maybe type not matched. Rule Type: "
                                    + ruleType);
                }
            }
            // clear rule listener not being notified in this time
            for (Map.Entry<String, Set<MeshRuleListener>> entry : listenerMap.entrySet()) {
                if (!ruleMap.containsKey(entry.getKey())) {
                    for (MeshRuleListener listener : entry.getValue()) {
                        listener.clearRule(appName);
                    }
                }
            }
        }
    }