画一画服务注册与发现的流程图
Dubbo 核心的配置有哪些?
在 Provider上可以配置的 Consumer 端的属性有哪些?
- timeout:方法调用超时
- retries:失败重试次数,默认重试 2 次
- loadbalance:负载均衡算法,默认随机
- actives 消费者端最大并发调用限制
Dubbo启动时如果依赖的服务不可用会怎样?
Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"。
可以通过 check="false" 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。
另外,如果你的 Spring 容器是懒加载的,或者通过 API 编程延迟引用服务,请关闭 check,否则服务临时不可用时,会抛出异常,拿到 null 引用,如果 check="false",总是会返回引用,当服务恢复时,能自动连上。
Dubbo推荐使用什么序列化框架,你知道的还有哪些?
推荐使用Hessian2序列化,还有Duddo、FastJson、Java自带序列化。
Dubbo默认使用的是什么通信框架,还有别的选择吗?
Dubbo 默认使用 Netty 框架,也是推荐的选择,另外内容还集成有Mina、Grizzly。
Dubbo支持服务多协议吗?
- Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议。
- 不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议
- 需要与 http 客户端互操作时,可以采用多协议暴露服务
当一个服务接口有多种实现时怎么做?
当一个接口有多种实现时,可以用 group 属性来分组,服务提供方和消费方都指定同一个 group 即可。
服务上线怎么兼容旧版本?
可以用版本号(version)过渡,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念有一点类似。
Dubbo可以对结果进行缓存吗?
可以,Dubbo 提供了声明式缓存,用于加速热门数据的访问速度,以减少用户加缓存的工作量。
lru 基于最近最少使用原则删除多余缓存,保持最热的数据被缓存。(默认缓存机制)threadlocal 当前线程缓存,比如一个页面渲染,用到很多 portal,每个 portal 都要去查用户信息,通过线程缓存,可以减少这种多余访问。jcache 与 JSR107 集成,可以桥接各种缓存实现。ExpiringCache,基于有效时间的缓存,默认缓存时间为180s, 每4秒检查一次是否过期。服务读写推荐的容错策略是怎样的?
- 读操作建议使用 Failover 失败自动切换,默认重试两次其他服务器。
- 写操作建议使用 Failfast 快速失败,发一次调用失败就立即报错。
Dubbo内置了哪几种服务容器?
服务容器是一个 standalone 的启动程序,因为后台服务不需要 Tomcat 或 JBoss 等 Web 容器的功能,如果硬要用 Web 容器去加载服务提供方,增加复杂性,也浪费资源。
服务容器只是一个简单的 Main 方法,并加载一个简单的 Spring 容器,用于暴露服务。
Spring Container
自动加载 META-INF/spring 目录下的所有 Spring 配置。
Log4j Container
自动配置 log4j 的配置,在多进程启动时,自动给日志文件按进程分目录。
Logback Container