Dubbo相关知识总结

Posted 合众科技直通车

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo相关知识总结相关的知识,希望对你有一定的参考价值。

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。

目前,公司对于Dubbo的使用主要是用于内部各系统间的接口调用,采用zookeeper作为注册中心,并结合接口管理平台系统实现对公司内部各系统接口的整体管理。Dubbo+zookeper的方式相较于传统的webservice方式实现远程调用的耦合性更低,性能更高,更易于分布式管理及扩展。

Dubbo框架技术及其用法相信大家也有一定了解,在此就不多做介绍,具体大家可参见dubbo官方文档:http://dubbo.io/Home-zh.htm

本文主要总结了一些Dubbo开发中遇到的问题供大家参考。

1、Dubbo接口参数序列化问题

dubbo调用服务时,通常传输数据是二进制数据,也就是说你传递对象时,这个对象将会被序列化为二进制数据,所以你传递的对象一定要实现Serializable接口。

 

2、Dubbo接口超时问题

dubbo的provider和consumer的配置文件中,如果都配置了timeout的超时时间,dubbo默认以consumer中配置的时间为准。

建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置。

Provider配置后,Consumer不配置则会使用Provider的配置值,即Provider配置可以作为Consumer的缺省值。否则,Consumer会使用Consumer端的全局设置,这对于Provider不可控的,并且往往是不合理的

PS: 配置的覆盖规则:1) 方法级配置别优于接口级别,即小Scope优先 2) Consumer端配置 优于 Provider配置 优于 全局配置,最后是Dubbo Hard Code的配置值(见配置文档)

 

3、Dubbo传输数据过大问题

dubbo服务提供层向消费层传输大数据容量的对象时,会受到Dubbo的限制,报类似如下异常:

com.alibaba.dubbo.remoting.transport.AbstractCodec.checkPayload() ERROR

Data length too large: 11557050, max payload: 8388608

java.io.IOException: Data length too large: 11557050, max payload: 8388608

原因:Dubbo传输数据大小默认为8M,即8388608,超限则抛异常。如需要允许超过该大小可增加payload属性(传输数据大小)即可。

注:大数据的传输并不符合Dubbo设计的初衷,Dubbo的长连接主要用于小数据包频繁调用,对于大数据的传输可以考虑通过其他方式实现。

 

4、Dubbo启动检查依赖问题

场景:假设有A和B两各系统,A作为Dubbo接口的调用方,B系统作为服务方,假如A系统发布时B系统处于停用状态,会发现A系统调用B系统的所有接口均抛异常。

原因:Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"。

可以通过 check="false" 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。

另外,如果你的 Spring 容器是懒加载的,或者通过 API 编程延迟引用服务,请关闭 check,否则服务临时不可用时,会抛出异常,拿到 null 引用,如果 check="false",总是会返回引用,当服务恢复时,能自动连上。

 

5、Dubbo端口被占用问题

系统启动dubbo报错Address already in use: bind

原因:dubbo启动时会向注册中心发送端口进行注册,同一注册中心端口不允许冲突。如出现端口被占用情况,请检查下该端口是否在注册中心被其他系统所占用。可在注册中心监控平台查看。

另外,开发环境替换服务器class文件后也会导致dubbo报错,系统需要重启才能解决。

原因:开发环境服务器容器一般都是配置为热部署的方式,替换服务器class文件后,服务器会自动重新部署启动,并重新先注册中心发送注册请求,而之前注册端口未关闭,因而导致dubbo重新注册时报错。

此时可以将端口改为-1,使用随机端口,可以解决问题 。

<dubbo:provider protocol="dubbo" port="-1"/>

 

最后,希望以上内容能为大家带来帮助,也欢迎大家补充和指正。



以上是关于Dubbo相关知识总结的主要内容,如果未能解决你的问题,请参考以下文章

关于 Dubbo 的重要入门知识点总结

Dubbo 总结:关于 Dubbo 的重要知识点

1w+字的 Dubbo 面试题/知识点总结!(2021 最新版)

1w+字的 Dubbo 面试题/知识点总结!(2021 最新版)

dubbo总结

测序相关知识总结