前言:为了实现dubbo编程式调用
定一个接口
public interface ToDoService { String test(String s); }
两个实现
@Service(group = "test1") public class ToDoService1 implements ToDoService { @Override public String test(String s) { return "1" + s; } }
@Service(group = "test2") public class ToDoService2 implements ToDoService { @Override public String test(String s) { return "2" + s; } }
这里通过 group来区分两个实现类
调用方:
/** * 执行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);