概述:
在开发及测试环境中,经常需要绕过注册中心,只测试指定的Dubbo服务,这时候可能需要点对点直连。点对点直连方式,将以服务接口为单位,从而忽略注册中心的提供者列表,会调用到本地开启的Dubbo服务中,本地Dubbo服务则可以以Debug模式启动,方便断点调试。
注意:
为了避免复杂化线上环境,不要在线上使用这个功能,只应在测试阶段使用
服务端配置
首先我们先在服务端的dubbo配置文件中,指定好服务端口,该端口可以随意指定,只要本地未使用就行,客户端的配置端口要与此保持一致
如果你在客户端调用时,报以下类似错误,那么你要检查下是否在你的服务端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属性指向提供者地址,该配置将绕过注册中心,直接调用本地启动的服务,配置如下:
方法2、 无代码侵入式 启动参数 配置
在consumer端的JVM启动参数中加入-D参数映射服务地址,如:(key为服务名,value为服务提供者url,此配置优先级最高)
-Dcom.xxxxx.wms.sservice.WWhCommandService=dubbo://localhost:20890
方法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服务的方法已介绍完毕,如果大家还有其它更便捷的方法,希望不吝赐教.