public void receiveConfigInfo()

in dubbo-cluster-extensions/dubbo-cluster-router-mesh/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshAppRuleListener.java [61:111]


    public void receiveConfigInfo(String configInfo) {
        if (logger.isDebugEnabled()) {
            logger.debug(MessageFormat.format("[MeshAppRule] Received rule for app [{0}]: {1}.", appName, configInfo));
        }
        try {
            Map<String, List<Map<String, Object>>> groupMap = new HashMap<>();

            Representer representer = new Representer(new DumperOptions());
            representer.getPropertyUtils().setSkipMissingProperties(true);
            Yaml yaml = new Yaml(new SafeConstructor(new LoaderOptions()), representer);
            Iterable<Object> yamlIterator = yaml.loadAll(configInfo);

            for (Object obj : yamlIterator) {
                if (obj instanceof Map) {
                    Map<String, Object> resultMap = (Map<String, Object>) obj;

                    String ruleType = computeRuleType(resultMap);
                    if (ruleType != null) {
                        groupMap.computeIfAbsent(ruleType, (k) -> new LinkedList<>())
                                .add(resultMap);
                    } else {
                        logger.error(
                                CLUSTER_FAILED_RECEIVE_RULE,
                                "receive mesh app route rule is invalid",
                                "",
                                "Unable to get rule type from raw rule. "
                                        + "Probably the metadata.name is absent. App Name: " + appName + " RawRule: "
                                        + configInfo);
                    }
                } else {
                    logger.error(
                            CLUSTER_FAILED_RECEIVE_RULE,
                            "receive mesh app route rule is invalid",
                            "",
                            "Rule format is unacceptable. App Name: " + appName + " RawRule: " + configInfo);
                }
            }

            ruleMapHolder = groupMap;
        } catch (Exception e) {
            logger.error(
                    CLUSTER_FAILED_RECEIVE_RULE,
                    "failed to receive mesh app route rule",
                    "",
                    "[MeshAppRule] parse failed: " + configInfo,
                    e);
        }
        if (ruleMapHolder != null) {
            meshRuleDispatcher.post(ruleMapHolder);
        }
    }