zoukankan      html  css  js  c++  java
  • 【Dubbo】05. Dubbo SPI中的Adaptive

    05. Dubbo中的Adaptive

    1. 什么是Adaptive功能

    Dubbo中的Adaptive功能,主要解决的问题是如何动态的选择具体的扩展点。通过getAdaptiveExtension统一对指定接口对应的所有扩展点进行封装,通过URL的方式对扩展点来进行动态选择。(dubbo中所有的注册信息都是通过URL的形式进行处理的)这里同样采用相同的方式进行实现。

    2. 实现方式

    前置内容参考:Dubbo中的SPI中的3.1节。

    2.1

    dubbo_spi_demo_apicom.dxh.service.HelloService中新增一个方法,该方法有一个参数URL(import org.apache.dubbo.common.URL),且该方法使用@Adaptive注解。

    package com.dxh.service;
    import org.apache.dubbo.common.URL;
    import org.apache.dubbo.common.extension.Adaptive;
    import org.apache.dubbo.common.extension.SPI;
    //这里的“增加的dog”是默认值
    @SPI("dog")
    public interface HelloService {
        String sayHello();
        
        @Adaptive
        String sayHello(URL url);
    }
    

    2.2

    新增了方法,所以补充实现类

    2.3

    dubbo_spi_demo_main中新建类

    package com.dxh;
    import com.dxh.service.HelloService;
    import org.apache.dubbo.common.URL;
    import org.apache.dubbo.common.extension.ExtensionLoader;
    
    public class DubboSpiMainTestAdaptive {
        public static void main(String[] args) {
            HelloService adaptiveExtension = ExtensionLoader.getExtensionLoader(HelloService.class).getAdaptiveExtension();
            URL url = URL.valueOf("test://localhost/hi?hello.service=human");
            String hello = adaptiveExtension.sayHello(url);
            System.out.println(hello);
        }
    }
    

    注释:

    • 因为在这里只是临时测试,所以为了保证URL规范,前面的信息均为测试值即可,关键的点在于hello.service参数,这个参数的值指定的就是具体的实现方式。关于为什么叫hello.service是因为这个接口的名称,其中后面的大写部分被dubbo自动转码为.分割。
    • 通过getAdaptiveExtension来提供一个统一的类来对所有的扩展点提供支持(底层对所有的扩展点进行封装)。
    • 调用时通过参数中增加URL对象来实现动态的扩展点使用。

    =号后面的内容就是之前META_INF.dubbo中配置的key
    截屏2021-04-25 下午11.01.38

    通过@SPI("dog")配置默认值,这样url中如果不传后面的就以默认值为准
    截屏2021-04-25 下午11.09.01

  • 相关阅读:
    学习进度(2)
    模拟退火 [JSOI2004]平衡点 / 吊打XXX
    快读快写 O3 优化
    卡特兰数(Catalan)公式、证明、代码、典例
    树状数组 :单点修改,区间查询
    倍增 [模板]最近公共祖先LCA
    对测 【模拟】
    对测 【离线DP+二分】
    模拟退火 (骗分算法)
    基础数论入门
  • 原文地址:https://www.cnblogs.com/isdxh/p/14702603.html
Copyright © 2011-2022 走看看