Dubbo有意思的特性介绍

Duboo 不单让我们可以像使用本地服务一样的使用远程服务,还设计了很多特性来满足我们平时开发时常见的场景,省却了我们不少麻烦,真是一款有良心的框架,下面针对这些场景和解决方案来具体解释下:

1、dubbo调用服务接口异常要不要直接抛出异常还是捕捉不再往上抛,这样可提高性能,因为异常的抛出会写堆栈信息,多了会影响性能

2、接口与参数,返回类型都放到公共包里,因为提供者与消费者都会引用到。

3、接口与参数都可以加一些验证,DUBBO自带了

4、Dubbo提供声明式缓存,以减少用户加缓存的工作量

<dubbo:reference interface="com.foo.BarService" cache="lru" />

<dubbo:reference interface="com.foo.BarService">

  <dubbo:method name="findBar" cache="lru" />

</dubbo:reference>

5、隐式传参,由消费方设置,提供方获取 RpcContext.getContext().setAttachment("index", "1"); // 隐式传参,后面的远程调用都会隐式将这些参数发送到服务器端,类似cookie,用于框架集成,不建议常规业务使用

String index = RpcContext.getContext().getAttachment("index"); // 获取客户端隐式传入的参数,用于框架集成,不建议常规业务使用

6、异步调用,基于NIO的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小。

<dubbo:reference id="fooService" interface="com.alibaba.foo.FooService">

<dubbo:method name="findFoo" async="true" />

</dubbo:reference>

fooService.findFoo(fooId); // 此调用会立即返回null

Future<Foo> fooFuture = RpcContext.getContext().getFuture();// 拿到调用的Future引用,当结果返回后,会被通知和设置到此Future

。 。。。。。//可进行多个类似上面的调用,相当于并发多个调用了

Foo foo = fooFuture.get(); // 如果foo已返回,直接拿到返回值,否则线程wait住,等待foo返回后,线程会被notify唤醒

。 。。。。。//都在等待各自结果的返回,以最长时间作为共需要的时间

如果你只是想异步,完全忽略返回值,可以配置return="false",以减少Future对象的创建和管理成本:

<dubbo:method name="findFoo" async="true" return="false" />

7、从 dubbo 2.2.0 开始,每个服务默认都会在本地暴露;在引用服务的时候,默认优先引用本地服务;如果希望引用远程服务可以使用一下配置强制引用远程服务。

<dubbo:reference ... scope="remote" />

8、本地存根,远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,比如:做ThreadLocal缓存,提前验证参数,调用失败后伪造容错数据等等,此时就需要在API中带上Stub,客户端生成Proxy实,会把Proxy通过构造函数传给Stub,然后把Stub暴露组给用户,Stub可以决定要不要去调Proxy。

<dubbo:service interface="com.foo.BarService" stub="true" />

com.foo.BarService

com.foo.BarServiceStub // 在API旁边放一个Stub实现,它实现BarService接口,并有一个传入远程BarService实例的构造函数

BarServiceStub implements BarService public (BarService barService) ,代理模式

9、本地伪装,服务提供方在客户端执行容错逻辑,因经常需要在出现RpcException(比如网络失败,超时等)时进行容错,Mock就可以不依赖RpcException,因为它的约定就是只有出现RpcException时才执行,如果用Stub,可能就需要捕获并依赖RpcException类 <dubbo:service interface="com.foo.BarService" mock="true" />

com.foo.BarService

com.foo.BarServiceMock // 在API旁边放一个Mock实现,它实现BarService接口,并有一个无参构造函数

public String sayHello(String name) {

// 你可以伪造容错数据,此方法只在出现RpcException时被执行

return "容错数据";

}

如果服务的消费方经常需要try-catch捕获异常,且想简单的忽略异常,可改为Mock实现,节约代码

<dubbo:service interface="com.foo.BarService" mock="return null" />

10、延迟暴露,如果你的服务需要Warmup时间,比如初始化缓存,等待相关资源就位等,可以使用delay进行延迟暴露。

<dubbo:service delay="5000" />

11、并发控制,限制服务器端或客户端并发执行(或占用线程池线程数)不能超过10个

<dubbo:service interface="com.foo.BarService" executes="10" />

如果<dubbo:service>和<dubbo:reference>都配了actives,<dubbo:reference>优先

Load Balance均衡:

配置服务的客户端的loadbalance属性为leastactive,此Loadbalance会调用并发数最小的Provider

12、粘滞连接,用于有状态服务,尽可能让客户端总是向同一提供者发起调用,除非该提供者挂了,再连另一台。

<dubbo:protocol name="dubbo" sticky="true" />

13、令牌验证,当服务的权限改变,由注册中心改变授权,不需修改服务代码 在提供者上设置

<dubbo:provider interface="com.foo.BarService" token="true" />//也token="123456" ,相当于密码

也可也服务级别设置

<dubbo:service interface="com.foo.BarService" token="true" />

时间: 2024-11-07 08:22:15

Dubbo有意思的特性介绍的相关文章

ArcGIS 10.2新特性介绍:影像

1.新增栅格类型 新增支持三种新的栅格类型:DMCii.Pleiades 和 SPOT6. 同时,新增提供中国卫星 Raster Type 扩展下载,支持中国卫星影像数据在ArcGIS 中的管理和使用.扩展支持的卫星产品包括: HJ 1A/1B CCD raster type ZY02C HRC raster type ZY02C PMS raster type ZY3 – CRESDA ZY3 – SASMAC 对于支持的国产卫星,正射.融合.镶嵌和匀色等常用处理,通过 ArcGIS 的On-

Hadoop 2.4.0新特性介绍

在2014年4月7日,Apache发布了Hadoop 2.4.0 .相比于hadoop 2.3.0,这个版本有了一定的改进,突出的变化可以总结为下列几点(官方文档说明): 1 支持HDFS访问控制列表(ACL,Access Control Lists) 这个特性解决了在一定情况下,文件权限访问的权限问题.其机制是基于Linux文件访问权限的特征,如果你熟悉Linux的文件访问机制,你就不用再去理解HDFS文件访问的特性了. 有了ACL特性后,对HDFS文件系统就具有了良性的扩展特性.HDFS-4

ArcGIS 10.3 for Desktop新特性介绍

ArcGIS 10.3是一个完整公布的ArcGIS平台,它包含新的产品(ArcGIS Pro),针对10.2版本号产品进行了功能增强和稳定性的改进. ArcGIS 10.3 for Server新特性介绍 http://blog.csdn.net/linghe301/article/details/31358733 ------------------------------------------------------------------ 版权全部,文章同意转载,但必须以链接方式注明源地

报表工具-ECharts 特性介绍

ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表. ECharts 3 中更是加入了更多丰富的交互功能以及更多的可视化效果,并且对移动端做了深度的优化. 丰富的图表类型 ECharts 提供了常规的折线图,柱状图,散点图,

NHibernate 3.0.0.Alpha1 发布及新特性介绍

发布 刚刚NHibernate的Leader--Fabio Maulo发布了NHibernate 3.0.0.Alpha1版本,这是NHibernate 3.0.0的第一个公开测试版本. 下载地址 你可以到这里下载NHibernate 3.0.0.Alpha1,基于.Net3.5平台,具体文件如下. NHibernate源码:NHibernate-3.0.0.Alpha1-src.zip NHibernate二进制文件:NHibernate-3.0.0.Alpha1-bin.zip 特性介绍 N

Aurigma Image Uploader控件免费下载特性介绍使用手册

Aurigma Image Uploader是一个功能强大的图像文件上传控件 该控件可以在客户端执行基本的图像处理:调整大小和旋转90度.缩略图可以使没有经过培训的用户也能方便的上载图像. 产品特征: Image Uploader是一个客户端的ActiveX / JAVA控件,它允许用户在自己的服务器上定位图像,执行基本的图像处理操作,编辑对图像的描述,然后向另一个服务器上载这些图像.它比采用标准HTML方式上载图像要方便得多.此外,它也能自动创建和上载每一幅图像的缩略图. Image Uplo

jdk7和8的一些新特性介绍

jdk7和8的一些新特性介绍 Java代码   本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html 在jdk7的新特性方面主要有下面几方面的增强: 1.jdk7语法上 1.1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头. // 所有整数 int, short,long,byte都可以用二

php7函数,声明,返回值等新特性介绍

使用 ... 运算符定义变长参数函数 (PHP 5 >= 5.6.0, PHP 7) 现在可以不依赖 func_get_args(), 使用 ... 运算符 来实现 变长参数函数. function f($req, $opt = null, ...$params) { // $params 是一个包含了剩余参数的数组 printf('$req: %d; $opt: %d; number of params: %d'."\n", $req, $opt, count($params)

Java 11 新特性介绍

Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个大版本,每个季度发布一个中间特性版本,并且做出不会跳票的承诺.通过这样的方式,Java 开发团队能够将一些重要特性尽早的合并到 Java Release 版本中,以便快速得到开发者的反馈,避免出现类似 Java 9 发布时的两次延期的情况. 按照官方介绍,新的版本发布周期将会严格按照时间节点,于每年