便捷调试dubbo服务之泛化调用

本文介绍了一种在不启动服务器的情况下,通过泛化调用方式对Dubbo服务进行调试的方法。通过创建Maven项目并添加相关依赖,利用Dubbo的泛化调用特性,可以直接调用远程服务,极大提高了开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近搭了一个新项目,使用微服务dubbo+zookeeper,其中有些接口是其他部门提供,在对这些接口调试验证的时候遇到了一些问题,其中一个就是调试接口,必须启动服务器,这样太浪费时间了,为了方便调试,下面写了一个test类,不需要启动服务器,即可对dubbo服务进行调试验证

主要使用了dubbo服务的泛化调用方式,下面直接上代码

一、快速创建一个maven项目,或现有的maven项目也可以
二、加入maven依赖
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.5.3</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-all</artifactId>
      <version>4.0.35.Final</version>
    </dependency>
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>2.11.1</version>
    </dependency>
    <dependency>
      <groupId>com.101tec</groupId>
      <artifactId>zkclient</artifactId>
      <version>0.10</version>
    </dependency>
三、java代码
package com.jin.dubbo;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.utils.ReferenceConfigCache;
import com.alibaba.dubbo.rpc.service.GenericService;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 泛化调用dubbo测试类
 */
public class DubboGenericTest {

    @Test
    public void GenericTest() {
        // 多注册中心地址
        String registry = "192.168.10.100:2181,192.168.10.101:2181,192.168.10.102:2181";
//        String registry = "127.0.0.1:2181";
        // dubbo接口
        String interfaces = "com.jin.dubbo.service.UserService__1_0";
        // 方法
        String function = "selectUserById";
        // 参数
        Map<String, String> parMap = new HashMap<>();
        parMap.put("id", "U00101");
        // 参数类型
        String parType = "java.util.Map";
        // 调用dubbo服务
        Object result = callDubbo(registry, interfaces, function, parMap, parType);
        System.out.println(result);
    }

    /**
     * 封装参数,调用dubbo服务
     *
     * @param registry   多注册中心地址
     * @param interfaces 调用接口地址
     * @param function   调用接口方法
     * @param parMap     接口参数
     * @param parType    参数类型
     * @return
     */
    private Object callDubbo(String registry, String interfaces, String function, Map<String, String> parMap, String parType) {
        ReferenceConfig config = new ReferenceConfig();
        config.setApplication(new ApplicationConfig("test"));
        config.setRegistries(getRegistry(registry)); // 多注册中心
        config.setGeneric(true); // 支持泛化调用
        config.setTimeout(10000); // 超时时间10秒
        config.setInterface(interfaces); // 接口
        ReferenceConfigCache cache = ReferenceConfigCache.getCache();
        GenericService genericService = (GenericService) cache.get(config);
        return genericService.$invoke(function, new String[]{parType}, new Object[]{parMap});
    }

    /**
     * 解析多注册中心地址
     *
     * @param registry 多注册中心地址
     * @return
     */
    private List<RegistryConfig> getRegistry(String registry) {
        List<RegistryConfig> registryConfigList = new ArrayList<>();
        String[] split = registry.split(",");
        for (String s : split) {
            registryConfigList.add(new RegistryConfig("zookeeper://" + s));
        }
        return registryConfigList;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值