Dubbo服务提供者单元测试

前言

由于工作中使用Dubbo接口极多,在产品之间联调时往往会出现调用超时或数据错乱问题,此时想单独测试调用该提供者接口时往往需要启动整个项目,当项目较大时往往比较耗时且比较麻烦,后来发现可以直接通过API配置的方式模拟一个消费者,直接调用该接口,简单粗暴,作为单元测试异常好用,下面直接贴该单元测试:

public class DubboProviderTest {

    /**
     * 当前应用注册信息
     */
    private static ApplicationConfig applicationConfig = new ApplicationConfig();
    /**
     * 注册中心信息缓存
     */
    private static Map<String, RegistryConfig> registryConfigMap = new ConcurrentHashMap<>();
    /**
     * key值
     */
    private static String key = null;

    static {
        applicationConfig.setName("xxx.consumer");
    }

    @Test
    public void test() {
        String address = "zookeeper://10.1.62.134:2181";
        ReferenceConfig<UserServiceApi> referenceConfig = getReferenceConfig(address, null, null, UserServiceApi.class);
        if (null != referenceConfig) {
            UserServiceApi userServiceApi = referenceConfig.get();
            // 然后就是对提供者的部分方法测试..
            UserDTO userDTO = userServiceApi.get("e10adc3949ba59abbe56e057f20f88dd");
            System.out.println(userDTO.getRealname());
        }
    }

    /**
     * 获取注册中心信息
     * @param address 注册中心地址
     * @param version 服务提供者版本号
     * @param group 服务所在的组
     * @return
     */
    private static RegistryConfig getRegistryConfig(String address, String version, String group) {
        key = address + "-" + version +  "-" + group;
        RegistryConfig registryConfig = registryConfigMap.get(key);
        if (null == registryConfig) {
            registryConfig = new RegistryConfig();
            registryConfig.setAddress(address);
            registryConfig.setVersion(version);
            registryConfig.setGroup(group);
            registryConfigMap.put(key, registryConfig);
        }
        return registryConfig;
    }

    /**
     * 获取服务提供者的代理对象
     * @param address
     * @param version
     * @param group
     * @param tClass 服务提供者接口
     * @param <T>
     * @return
     */
    private static <T> ReferenceConfig<T> getReferenceConfig(String address, String version, String group, Class<T> tClass) {
        // 该实例很重,有必要可缓存,否则可能造成内存泄漏和连接泄漏
        ReferenceConfig<T> referenceConfig = new ReferenceConfig<>();
        referenceConfig.setInterface(tClass);
        referenceConfig.setApplication(applicationConfig);
        referenceConfig.setRegistry(getRegistryConfig(address, version, group));
        referenceConfig.setVersion(version);
        return referenceConfig;
    }
}

若想同样通过API配置的方式启动服务提供者,可参考该Dubbo中文手册:https://www.bookstack.cn/read/ApacheDubbo-zh/11.md

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清茶_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值