Dubbo服务本地调测优雅实践

本文介绍在不污染项目配置文件,不影响服务器服务的前提下,如何优雅地在本地调测Dubbo服务

1 问题场景

分布式应用的调试总是比常规项目开发调试起来要麻烦很多,主要如下:

  • Dubbo服务开发完服务提供者后需要进行本地测试测试,本来希望请求的服务是本地服务,结果经常调用到服务器的服务
  • Dubbo支持修改本地配置文件,使服务消费者调用本地服务,但是该本地配置不小心提交上Git/SVN,会导致服务器上版本服务不正常

2 解决步骤

  • 1 创建properties文件
    创建一个properties文件,名字可以随便命名,例如命名为:dubbo-local.properties,这个文件可以放在任何地方。该文件不提交到Git/SVN,建议不要放在工程目录里以避免自己提交了都不知道,建议放在用户目录下${user.home}
    获取用户目录的方法之一:

    System.out.println(System.getProperty("user.home"));
  • 2 修改properties文件

    # 以下是你们DubboServer.xml中配置的需要Export Service,
    # 建议你有几个要Export Service都配置在这里,后面是请求本地的地址
    # 地址格式:dubbo://ip:port,这里需要注意的是,需要修改为自己dubbo服务的端口
    com.ibeiliao.course.stub.provider.AdCourseProvider=dubbo://localhost:20880

为方便开发测试,经常会在线下共用一个所有服务可用的注册中心,这时,如果一个正在开发中的服务提供者注册,可能会影响消费者不能正常运行。
可以加入如下配置来禁用注册:

# 禁止服务提供者注册到注册中心
dubbo.registry.register=false
  • 3 配置运行的环境变量
    参数:-Ddubbo.properties.file
    值:dubbo-local.properties文件的本地绝对路径
    这里我基于IDEA运行Junit测试,配置环境变量方法如下
  • 4 运行并测试
    我这里基于Junit测试,在测试类头加上2个注解,applicationContext.xml是Spring配置文件
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration({ "classpath:applicationContext.xml" })
    image.png
    可以看到,在Dubbo服务提供者代码打断点,程序可以正常再断点处停下

3 总结

参考Dubbo官方文档,Dubbo获取配置文件时,优先级如下:

  • JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口
  • XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效
  • Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名

参考

Dubbo本地调试最优方式,本地Server端调用本地Client端
Dubbo官方文档
dubbo 知识总结 dubbo配置参考


 上一篇
线程的5种状态总结 线程的5种状态总结
线程的5种状态线程可以有如下5种状态:5种状态的转换图如下 New (新创建)*  当用*new**操作符创建一个线程时,如new Thread(r),该线程还没有开始运行。这意外这它的状态是new。此时程序还没有开始运行线程中的代码,
2019-10-13
下一篇 
编程常用快捷键 编程常用快捷键
Intellij idea快捷键编辑类快捷键Ctrl + Shift + Alt + U 生成UML图(专业版才有的功能)Ctrl + Alt + L 代码自动缩进Ctrl + Alt + T 对选中的代码块进行
2019-10-13
  目录