达博几个好用的功能介绍

  

达博功能非常完善,很多时候我们不需要重复造轮子,下面列举一些你不一定知道,但是很好用的功能,

直连提供者

在开发及测试环境下,可能需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直连模式,将以服务接口为单位,忽略注册中心的提供者列表,   接口配置点对点,不影响B接口从注册中心获取列表(说明:官方只建议开发和测试环境使用该功能),用法如下,url指定的地址就是直连地址:

多版本

当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用,用法如下:

利用达博该特性,我们能够实现一些功能的灰度发布,实现步骤如下:

接口旧的实现定义version=" 1.0.0 ",接口新的实现version=" 2.0.0 "

消费者端定义version=" * "

这样定义提供者和使用者后,新旧接口实现各承担50%的流量;

利用达博该特性,还能完成不兼容版本迁移:

在低压力时间段,先升级一半提供者为新版本;

再将所有消费者升级为新版本;

然后将剩下的一半提供者升级为新版本。

回声测试

回声测试用于检测服务是否可用,回声测试按照正常请求流程执行,能够测试整个调用是否通畅,可用于监控。

所有服务自动实现EchoService接口,只需将任意服务引用强制转型为EchoService   即可使用,使用方式(demoService是弹簧管理的bean)

EchoService EchoService=(EchoService) demoService;

System.out.println (EchoService。美元回波(“hello”)),

隐式参数

可以通过RpcContext的setAttachment()和getAttachment ()   在消费者和提供者之间进行参数的隐式传递,例如控制器层拦截登录令牌,把根据令牌得到的memberId传给达博服务就能使用隐式参数传递的方式,setAttachment()设置的   KV对,在完成一次远程调用会被清空,即多次远程调用要多次设置。使用方式:

1。服务端设置:

RpcContext.getContext ()。setAttachment (“CRT_MEMBER_ID”、“13828886888”);

2。客户端得到:

RpcContext.getContext () .getAttachment (CRT_MEMBER_ID)

上下文

上下文中存放的是当前调用过程中所需的环境信息。所有配置信息都将转换为URL的参数

RpcContext是一个ThreadLocal的临时状态记录器,当接收到RPC请求,或发起RPC请求时,RpcContext   的状态

都会变化,例如:A调B, B再调C,则B机器上,在B调C之前,RpcContext记录的是A调的信息,在B调   C

之后,RpcContext记录的是B C调的信息。使用方式:

布尔isConsumerSide=RpcContext.getContext () .isConsumerSide ();

本地伪装

本地伪装通常用于服务降级,例如某验权服务,当服务提供方全部挂掉后,客户端不抛出异常,而是通过模拟数据

返回授权失败。使用方式如下,模拟指定的实现类在提供者抛出RpcException异常时执行(一定要抛出RpcException异常才执行),取代远程返回结果:

DemoServiceMock实现源码:

公共类DemoServiceMock实现DemoService {

公共字符串sayHello(字符串名称){

返回“mock-value”;

}

}

泛化调用

泛化接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有的POJO   均用映射表示,通常用于框架集成,例如:实现一个通用的服务测试框架,可通过GenericService调用所有服务实现。使用方式:

调用源码:

/* *

* @author afei

* @version 1.0.0

* @since 2017年11月22日

*/

公共类主要{

公共静态void Main (String [] args) {

//引?远程服务,该实例封装了所有与注册中?及服务提供吗?连接,请缓存

ReferenceConfig参考=new ReferenceConfig ();

//弱类型接名

reference.setInterface (“com.alibaba.dubbo.demo.DemoService”);

reference.setVersion (“1.0.0);

//声明为泛化接口

reference.setGeneric(真正);

//com.alibaba.dubbo.rpc.service。GenericService可以替代所有接口引用

GenericService GenericService=reference.get ();

//基本类型以及日期列表,地图等不需要转换,直接调用

=GenericService对象的结果。调用美元(“sayYes”、新String []   {" . lang。字符串"},新对象[]{afei "});

system . out。println(“结果——比;“+结果);

//映射表示POJO参数,如果返回值为POJO也将自动转成地图

地图老师=new HashMap ();

老师。put (" id ", " 1 ");

老师。把(“名字”,“admin”);

老师。把(“年龄”、“18”);

达博几个好用的功能介绍