1. 使用背景

想要调用远程的方法,但发现没有api接口包,就无法直接引用,此时可以使用泛型调用,调用方可不用知道被调用方的具体细节;

2.Provider

package provider;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import service.GreetingService;
import service.impl.GreetingServiceImpl;

import java.io.IOException;

public class ApiProvider {
    public static void main(String[] args) throws IOException {
        //1.设置ServiceConfig实例
        ServiceConfig<GreetingService> serviceServiceConfig = new ServiceConfig<>();
        //2.设置应用程序配置
        serviceServiceConfig.setApplication(new ApplicationConfig("first-dubbo-provider"));
        //3.设置注册中心
        RegistryConfig registryConfig = new RegistryConfig("zookeeper://81.68.187.197:30002");

        serviceServiceConfig.setRegistry(registryConfig);
        //4.设置接口以及实现类
        serviceServiceConfig.setInterface(GreetingService.class);
        serviceServiceConfig.setRef(new GreetingServiceImpl());
        serviceServiceConfig.setProtocol(new ProtocolConfig("dubbo",-1));

//        serviceServiceConfig.getProvider().setPort((int)(20880+Math.random()*10));
        //5.设置分组与版本
        serviceServiceConfig.setVersion("1.0.0");
        serviceServiceConfig.setGroup("dubbo");
        serviceServiceConfig.setTimeout(500000);
        serviceServiceConfig.setLoadbalance("random");
        //6.设置线程池策略

        //HashMap<String, String> parameters = new HashMap<>();
        //parameters.put("threadpool","mythreadpool");
        //serviceServiceConfig.setParameters(parameters);
//        AsyncContext
        //7.导出
        serviceServiceConfig.export();
        System.out.println("success");
        System.in.read();
    }
}

3.Consumer

package generic;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.rpc.service.GenericService;

import java.util.HashMap;
import java.util.Map;

public class GenericConsumer {
    public static void main(String[] args) {
        ReferenceConfig<GenericService> referenceConfig = new ReferenceConfig<>();
        referenceConfig.setApplication(new ApplicationConfig("first-dubbo-config"));
        referenceConfig.setRegistry(new RegistryConfig("zookeeper://81.68.187.197:30002"));
        referenceConfig.setInterface("service.GreetingService");
        referenceConfig.setVersion("1.0.0");
        referenceConfig.setGroup("dubbo");
        referenceConfig.setGeneric(true);
        referenceConfig.setTimeout(500000);
        GenericService genericService = referenceConfig.get();
        HashMap<String, Object> map = new HashMap<>();
        map.put("id", "-100");
        map.put("name", "李源");

        Map<String,Object> testGeneric = (Map) genericService.$invoke("testGeneric", new String[]{"pojo.Pojo"}, new Object[]{map});
        System.out.println(testGeneric);

        Object hello = genericService.$invoke("sayHello", new String[]{"java.lang.String"}, new Object[]{"liyuan"});
        System.out.println(hello);
    }

}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐