dubbo编程式动态调用

2021-01-18 10:35:05 浏览数 (1)

前言:为了实现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);

0 人点赞