前言:为了实现dubbo编程式调用
定一个接口
代码语言:javascript复制public interface ToDoService {
String test(String s);
}
两个实现
代码语言:javascript复制@Service(group = "test1")
public class ToDoService1 implements ToDoService {
@Override
public String test(String s) {
return "1" s;
}
}
代码语言:javascript复制@Service(group = "test2")
public class ToDoService2 implements ToDoService {
@Override
public String test(String s) {
return "2" s;
}
}
这里通过 group来区分两个实现类
调用方:
代码语言:javascript复制/**
* 执行ToDoService
*
* @param group
* @return
*/
public String executeToDoService(String group) {
ReferenceConfig<ToDoService> referenceConfig = new ReferenceConfig<>();
referenceConfig.setInterface(ToDoService.class);
referenceConfig.setGroup(group);
ReferenceConfigCache cache = ReferenceConfigCache.getCache();
ToDoService toDoService1 = cache.get(referenceConfig);
try {
return toDoService1.test("哈哈");
} catch (Exception ex) {
return "";
}
}
这里需要注意的是,ReferenceCofing 官方文档里说很重,需要缓存,言外之意就是不要重复new ReferenceCofing 实例,这样会不断的会注册成为消费者 Consumer 。
但是官方提供了 ReferenceConfigCache ,所以不要自己写个什么静态的 hashMap来缓存,用dubbo开发者提供的工具来获取 我们需要调用的实例
ReferenceConfigCache cache = ReferenceConfigCache.getCache(); ToDoService toDoService1 = cache.get(referenceConfig);