Dubbo泛化调用
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);
}
}
作者:Yuan_xii
来源链接:https://blog.csdn.net/Yuan_xii/article/details/121019310