dubbo泛化

dubbo泛化:
以下幾種場景可以考慮使用泛化調用:
    服務測試平臺
    API 服務網關
    
泛化調用主要用於消費端沒有 API 接口的情況;不需要引入接口 jar 包,而是直接通過 GenericService 接口來發起服務調用,參數及返回值中的所有 POJO 均用 Map 表示。泛化調用對於服務端無需關注,按正常服務進行暴露即可。

官方文檔鏈接:http://dubbo.apache.org/zh-cn/blog/dubbo-generic-invoke.html

dubbo泛化示例: 

package dubbo;
 
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.utils.ReferenceConfigCache;
import org.apache.dubbo.rpc.service.GenericService;
 
public class DubboGeneric {
 
    /**
     * 執行dubbo方法
     *
     * @param method     dubbo方法
     * @param paramTypes 入參類型數組
     * @param params     入參
     * @return 執行方法的結果
     */
    static void executMethod(String method, String[] paramTypes, String[] params) {
        String zookeeperUrl = "127.0.0.1:2881";
        String providerUrl = "127.0.0.1:1234";
        String interfaceName = "com.mine.dubbo.demo.DemoService";
        String interfaceVerison = "";
        String group = "";
 
        // 獲取泛化對象
        GenericService genericService = getGenericService(zookeeperUrl, providerUrl, interfaceName, interfaceVerison, group);
 
        // for(String method: method){
        // 泛化調用
        genericService.$invoke(method, paramTypes, params);
        // }
    }
 
    /**
     * 獲取泛化對象
     * @param zookeeperUrl zookeeper集羣地址
     * @param providerUrl 服務提供者的地址
     * @param interfaceName 接口文件全路徑名
     * @param interfaceVerison 接口版本
     * @param group 組名
     * @return 泛化對象
     */
    static GenericService getGenericService(String zookeeperUrl, String providerUrl, String interfaceName,
                                            String interfaceVerison, String group) {
        ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
        // set application
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("");
        applicationConfig.setOwner("");
        applicationConfig.setOrganization("");
        reference.setApplication(applicationConfig);
 
        // set zookeeper or provider
        if (zookeeperUrl != null && zookeeperUrl.trim().length() != 0) {
            // 通過zookeeper連接
            RegistryConfig registryConfig = new RegistryConfig();
            registryConfig.setAddress(zookeeperUrl);
            registryConfig.setProtocol("zookeeper");
            registryConfig.setCheck(false);
            reference.setRegistry(registryConfig);
        } else {
            // 直連
            reference.setUrl(providerUrl);
        }
        // set timeout
        reference.setTimeout(1000);
        // set retry times
        reference.setRetries(0);
        // set check
        reference.setCheck(false);
        // set generic
        reference.setGeneric(true);
        // set interface version
        if (interfaceVerison != null && interfaceVerison.length() != 0) {
            reference.setVersion(interfaceVerison);
        }
        // set interface name
        reference.setInterface(interfaceName);
        // set service id
        reference.setId(interfaceName);
        // set dubbo protocol
        reference.setProtocol("dubbo");
        //
        if (group != null && group.length() != 0) {
            reference.setGroup(group);
        }
 
        // 從zookeeper獲取緩存,從緩存中獲取泛化
        GenericService genericService = ReferenceConfigCache.getCache().get(reference);
 
        return genericService;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章