dubbo服务治理架构与原理( 三 )


5.踩坑实例5.1.Reference注解
使用@Reference注解在消费者端注入提供者依赖的时候 , MVC容器获取对象时可能出现Null的情况 。Reference注解生成的实例是不会交给Spring容器托管的 , 只是作为Spring管理bean的一个属性赋值去操作 , 所以无法通过BeanFactory.getBean()获得 。如果容器初始化时先加载了MVC容器 , 随后加载Dubbo实例 , 这时在Controller层引用的dubbo对象会造成空指针的异常 , 所以加载时需要进行编排 , 先加载dubbo实例 , 再加载MVC容器 。另外一种方案是设计一个组件层 , 将dubbo和业务层在组件层进行组装 , 提供Controller层使用 。
5.2.Dubbo超时和重连机制
Dubbo默认有超时和重连机制 , 在异常场景下如果不注意会引起异常或者幂等性的异常情况 。超时机制是在指定时间内Provider没有返回 , 则认定本次调用失败 。默认重连2次 , 超时1000ms 。另外Dubbo可以以服务 , 接口 , 方法3个纬度配置参数 , 值得注意的是配置以消费者端为准 , 如果消费者端未配置则以提供者端为准 。
5.3.Dubbo序列化协议
Dubbo适合高并发量小数据传输的RPC场景 , 默认dubbo协议交互 , 但是出于性能考虑很多公司会采用kryo序列化方式来提升性能 , kryo确实性能要高出很多 , 但是有一个弊端 , 就是序列化对象修改后不能向上向下兼容 , 换句话来说就是DTO对象增加了一个字段 , 服务提供者和消费者两端需要同时升级版本 , 否则接口调用就会报错 。这里可以自己扩展Dubbo预留的Serialization接口在kryo的基础上完善序列化协议 。




推荐阅读