dubbo本地调试直连本地服务

概述:

在开发及测试环境中,经常需要绕过注册中心,只测试指定的Dubbo服务,这时候可能需要点对点直连。点对点直连方式,将以服务接口为单位,从而忽略注册中心的提供者列表,会调用到本地开启的Dubbo服务中,本地Dubbo服务则可以以Debug模式启动,方便断点调试。

注意:

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

服务端配置

首先我们先在服务端的dubbo配置文件中,指定好服务端口,该端口可以随意指定,只要本地未使用就行,客户端的配置端口要与此保持一致








dubbo本地调试直连本地服务_第1张图片

如果你在客户端调用时,报以下类似错误,那么你要检查下是否在你的服务端vm启动参数中配置了以下参数:

报错信息

cause: com.alibaba.dubbo.remoting.RemotingException: Not found exported service: com.xxxxx.wms.sservice.WWhCommandService:20890 in
[com.xxxxx.wms.sservice.WWhCommandService:test:20890, com.xxxxx.wms.sservice.SWhWmsConsumableService:test:20890...

vm启动参数

如果存在该参数,那么进行以下任意一项操作,然后再重启服务端即可:

方法1. 删除该配置参数(如果可以删,则推荐删除).

方法2. 在consumer的中配置version="test"
该version值要与服务端启动参数-Ddubbo.service.version配置的值保持一致,且最好惟一,以保证不与其它服务冲突.

提示:vm中配置的dubbo.service.version参数可以自动被dubbo服务引用到,因此可以不用显示的在中指定,当然指定也是可以.

客户端配置 以下为客户端,即调用者的配置

方法1、 如果是少量的几个服务接口需要点对点连接,可以直接在consumer的中配置url属性指向提供者地址,该配置将绕过注册中心,直接调用本地启动的服务,配置如下:


dubbo本地调试直连本地服务_第2张图片

方法2、 无代码侵入式 启动参数 配置

在consumer端的JVM启动参数中加入-D参数映射服务地址,如:(key为服务名,value为服务提供者url,此配置优先级最高)

-Dcom.xxxxx.wms.sservice.WWhCommandService=dubbo://localhost:20890

dubbo本地调试直连本地服务_第3张图片

方法3、 无代码侵入式 文件映射 配置

如果服务比较多,也可以用文件映射配置,如:

用-Ddubbo.resolve.file指定映射文件路径,此配置优先级高于中的配置.
-Ddubbo.resolve.file=d:/source/config/xxx.properties
当前指定绝对路径的方式,文件名可随意填写,经测试文件路径正斜杠/,反斜杠\都可以加载的到.

Dubbo2.0以上版本会自动加载${user.home}/dubbo-resolve.properties文件,无需显示在vm启动参数中配置.
例:Win7下的user.home目录为C:\Users\Administrator,那么只需要将名为dubbo-resolve.properties的文件
放在该目录下即可,无需在启动参数中明确指定 (注意:文件名不能变).

然后在映射文件dubbo-resolve.properties中加入以下配置:(key为服务名,value为服务提供者url)
com.xxxxx.wms.sservice.SWhWmsMoveStockService=dubbo://localhost:20890
com.xxxxx.wms.sservice.SWhWmsMoveStorehouseService=dubbo://localhost:20890
com.xxxxx.wms.sservice.SWhWmsOccupyService=dubbo://localhost:20890
....

经测试,方法2的配置方式优先级高于方法3
即优先级别从高到低:方法2 > 方法3 > 方法1

至此,通过配置调用本地Dubbo服务的方法已介绍完毕,如果大家还有其它更便捷的方法,希望不吝赐教.

转载于:https://my.oschina.net/huoyun/blog/3067391

你可能感兴趣的:(dubbo本地调试直连本地服务)