说明
先看:https://www.yuque.com/docs/share/8dc0c4c1-6e65-4690-8cf8-26d6e500bcd0?# 《本地直连方式1-代码配置注解方式》
在这个博客的基础上进行改造的
注解方式配置直连痛点
代码配置的方式存在一个弊端,就是如果你提交代码的时候,你还要删掉直连配置,
将下面的配置
@Reference(protocol = "dubbo", url = "dubbo://10.10.87.80:20880", version = "default")
private DemoService demoService;
改成
@Reference(version = "default")
private DemoService demoService;
如果有一天你忘了改了,然后你就提交代码上去了,这样别人发布到linux上肯定是无法访问的, 到时候排查问题的时候排查到是这个直连配置的问题,那么你就会很尴尬
所以直连还有另外一种解决方式,就是读取外部配置文件
dubbo官方文档说明
dubbo官方地址:
https://dubbo.apache.org/zh/docs/advanced/explicit-target/
如果服务比较多,也可以用文件映射,用 -Ddubbo.resolve.file 指定映射文件路径,此配置优先级高于
java -Ddubbo.resolve.file=xxx.properties
然后在映射文件 xxx.properties 中加入配置,其中 key 为服务名,value 为服务提供者 URL:
com.alibaba.xxx.XxxService=dubbo://localhost:20890
提示
1.0.15 及以上版本支持,2.0 以上版本自动加载 ${user.home}/dubbo-resolve.properties文件,不需要配置
注意:为了避免复杂化线上环境,不要在线上使用这个功能,只应在测试阶段使用。
开始操作
@Test
public void c_() {
System.out.println(
System.getProperty("user.home")
);
}
通过运行上面的代码得知${user.home}是在C:\Users\Administrator 路径下
那么就在C:\Users\Administrator路径下创建一个名字叫dubbo-resolve.properties配置文件
开始代码演示
代码地址
https://gitee.com/zjj19941/ZJJ_Dubbo 的local-direct-connection-2 文件夹的项目就是了.
不配置直连
启动两个provider,然后执行consumer,先不要配置dubbo-resolve.properties,或者将com.zjj.DemoService=dubbo://10.10.87.80:20880这行注释掉,也就是在前面加个”#” 符号, 就是注释掉了.
通过控制台发现comsumer是随机调用provider的.
我是provider1
我是provider2
我是provider1
我是provider2
我是provider2
我是provider1
我是provider1
我是provider1
我是provider1
我是provider2
配置直连
dubbo-resolve.properties文件内容
com.zjj.DemoService=dubbo://10.10.87.80:20880
直接启动consumer, 两个provider不用重启,因为刚刚已经启动了.
通过控制台能发现consumer调用的是一台provider,说明配置直连成功了.
我是provider1
我是provider1
我是provider1
我是provider1
我是provider1
我是provider1
我是provider1
我是provider1
我是provider1
我是provider1