간편한 디버깅dubbo 서비스의 범용 호출

18597 단어 dubboZookeeper
최근에 새로운 프로젝트를 만들었는데 마이크로서비스dubbo+zookeeper를 사용했습니다. 그 중 일부 인터페이스는 다른 부서에서 제공했습니다. 이 인터페이스에 대한 디버깅 검증을 할 때 문제가 발생했습니다. 그 중 하나는 디버깅 인터페이스입니다. 서버를 시작해야 합니다. 서버를 시작해야 합니다. 이렇게 하면 시간을 너무 낭비합니다. 디버깅을 편리하게 하기 위해test클래스를 썼습니다. 서버를 시작할 필요가 없어서dubbo 서비스에 대한 디버깅 검증을 할 수 있습니다.
주로 dubbo 서비스의 범용 호출 방식을 사용했는데, 아래에 코드를 직접 올렸다
1. 마븐 프로젝트를 신속하게 만들거나 기존의 마븐 프로젝트도 만들 수 있습니다.
2. 마븐 의존 가입
    <dependency>
      <groupId>com.alibabagroupId>
      <artifactId>dubboartifactId>
      <version>2.5.3version>
      <scope>testscope>
    dependency>
    <dependency>
      <groupId>io.nettygroupId>
      <artifactId>netty-allartifactId>
      <version>4.0.35.Finalversion>
    dependency>
    <dependency>
      <groupId>org.apache.curatorgroupId>
      <artifactId>curator-frameworkartifactId>
      <version>2.11.1version>
    dependency>
    <dependency>
      <groupId>com.101tecgroupId>
      <artifactId>zkclientartifactId>
      <version>0.10version>
    dependency>

3. 자바 코드
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;
    }

}

좋은 웹페이지 즐겨찾기