hsf笔记-ServiceMetadataBeforeInit

ServiceMetadata是一个很重要的概念,其存储着Provider和Consumer相关的信息

1.ServiceMetadataBeforeInit接口

在ServiceMetadata的init方法开始时调用,意图很明显,即在init之前再对ServiceMetadata做处理

public interface ServiceMetadataBeforeInit {
    void beforeInit(ServiceMetadata var1);
}

有4个实现,分别如下

  1. EdasInvokeTypeServiceMetadataBeforeInit

根据invokeType添加Registry

    public void beforeInit(ServiceMetadata serviceMetadata) {
        String invokeType = (String)serviceMetadata.getAttachment("service.invoke.type");
        if (StringUtils.isEmpty(invokeType)) {
            invokeType = System.getProperty("service.invoke.type", "HSF");
        }
        if (invokeType.equalsIgnoreCase("DUBBO")) {
            List<Registry> registries = new ArrayList();
            DubboRegistry dubboRegistry = new DubboRegistry();
            registries.add(dubboRegistry);
            serviceMetadata.setRegistries(registries);
        } else if (invokeType.equalsIgnoreCase("HSF,DUBBO") || invokeType.equalsIgnoreCase("DUBBO,HSF")) {
            serviceMetadata.putAttachment("addExtraDubboRegistry", true);
        }
    }
  1. DefaultServiceMetadataBeforeInit

添加默认的Registry和Protocol

    public void beforeInit(ServiceMetadata serviceMetadata) {
        List<Registry> registries = serviceMetadata.getRegistries();
        if (registries == null) {
            registries = new ArrayList();
        }
        if (((List)registries).isEmpty()) {
            Registry registry = (Registry)HSFServiceContainer.getInstance(Registry.class, this.config.getString("hsf.registry.default"));
            if (registry != null) {
                ((List)registries).add(registry);
            }
        }
        serviceMetadata.setRegistries((List)registries);
        List<Protocol> protocols = serviceMetadata.getProtocols();
        if (protocols == null) {
            protocols = new ArrayList();
        }
        if (((List)protocols).isEmpty()) {
            ((List)protocols).addAll(HSFServiceContainer.getInstances(Protocol.class, new String[0]));
        }
        serviceMetadata.setProtocols((List)protocols);
    }
  1. EdasServiceMetadataBeforeInit

对参数做检查补充

  1. ExtraDubboRegistryServiceMetadataBeforeInit

根据EdasInvokeTypeServiceMetadataBeforeInit添加的参数补充添加DubboRegistry

    public void beforeInit(ServiceMetadata serviceMetadata) {
        Boolean flag = (Boolean)serviceMetadata.getAttachment("addExtraDubboRegistry");
        if (flag != null && flag) {
            boolean exist = false;
            Iterator i$ = serviceMetadata.getRegistries().iterator();

            while(i$.hasNext()) {
                Registry registry = (Registry)i$.next();
                if (registry instanceof DubboRegistry) {
                    exist = true;
                    break;
                }
            }
            if (!exist) {
                serviceMetadata.getRegistries().add(new DubboRegistry());
            }
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,228评论 19 139
  • Dubbo是什么 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式...
    Coselding阅读 17,382评论 3 196
  • 姓名:周小蓬 16019110037 转载自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw阅读 34,837评论 13 425
  • 一秒钟的考虑,四个小时的车程,两个小时畅所欲言,让我在国庆的最后一天,打开了一扇门,为自己生活增添了一抹色彩! 2...
    2ed2a96defbc阅读 3,122评论 2 2
  • 一个对的选择可以改变一生,一份福报的事业 值得一辈子去做! 我叫慕容,是一个结婚8年,有着一个可爱儿子、顾家妻子的...
    小冷女装阅读 4,606评论 0 0

友情链接更多精彩内容