说明

先看:https://www.yuque.com/docs/share/8dc0c4c1-6e65-4690-8cf8-26d6e500bcd0?# 《本地直连方式1-代码配置注解方式》
在这个博客的基础上进行改造的

注解方式配置直连痛点

代码配置的方式存在一个弊端,就是如果你提交代码的时候,你还要删掉直连配置,

将下面的配置

  1. @Reference(protocol = "dubbo", url = "dubbo://10.10.87.80:20880", version = "default")
  2. private DemoService demoService;

改成

  1. @Reference(version = "default")
  2. private DemoService demoService;

如果有一天你忘了改了,然后你就提交代码上去了,这样别人发布到linux上肯定是无法访问的, 到时候排查问题的时候排查到是这个直连配置的问题,那么你就会很尴尬

所以直连还有另外一种解决方式,就是读取外部配置文件

dubbo官方文档说明

dubbo官方地址:
https://dubbo.apache.org/zh/docs/advanced/explicit-target/

如果服务比较多,也可以用文件映射,用 -Ddubbo.resolve.file 指定映射文件路径,此配置优先级高于 中的配置,如:

  1. java -Ddubbo.resolve.file=xxx.properties

然后在映射文件 xxx.properties 中加入配置,其中 key 为服务名,value 为服务提供者 URL:

  1. com.alibaba.xxx.XxxService=dubbo://localhost:20890

提示

1.0.15 及以上版本支持,2.0 以上版本自动加载 ${user.home}/dubbo-resolve.properties文件,不需要配置

注意:为了避免复杂化线上环境,不要在线上使用这个功能,只应在测试阶段使用。

开始操作

  1. @Test
  2. public void c_() {
  3. System.out.println(
  4. System.getProperty("user.home")
  5. );
  6. }

通过运行上面的代码得知${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的.

  1. 我是provider1
  2. 我是provider2
  3. 我是provider1
  4. 我是provider2
  5. 我是provider2
  6. 我是provider1
  7. 我是provider1
  8. 我是provider1
  9. 我是provider1
  10. 我是provider2

配置直连

dubbo-resolve.properties文件内容

  1. com.zjj.DemoService=dubbo://10.10.87.80:20880

直接启动consumer, 两个provider不用重启,因为刚刚已经启动了.
通过控制台能发现consumer调用的是一台provider,说明配置直连成功了.

  1. 我是provider1
  2. 我是provider1
  3. 我是provider1
  4. 我是provider1
  5. 我是provider1
  6. 我是provider1
  7. 我是provider1
  8. 我是provider1
  9. 我是provider1
  10. 我是provider1