作者:mobiledu2502900917 | 来源:互联网 | 2023-09-23 17:40
本文由编程笔记#小编为大家整理,主要介绍了Java面试-Dubbo [ 一 ]相关的知识,希望对你有一定的参考价值。
来源:segmentfault.com/u/jack3021
Dubbo篇
1.Dubbo是什么?
Dubbo是阿里巴巴开源的基于Java的高性能RPC分布式服务框架。
2.为什么使用Dubbo?
因为是阿里开源项目,国内很多互联网公司都在使用,已经经过了很多线上考验。
内部使用Netty、Zookeeper,保证了高性能高可用性。
使用dubbo可以将核心业务抽取出来,作为独立的服务,用于提高业务复用灵活扩展。
3.dubbo支持什么协议,推荐用哪种?
dubbo://(推荐)
rmi://
hessian://
http://
webservice://
thrift://
memcached://
redis://
rest://
4.Dubbo需要 Web 容器吗?
不需要,如果硬要用 Web 容器,只会增加复杂性,也浪费资源。
5.Dubbo内置了哪几种服务容器?
Spring Container
Jetty Container
Log4j Container
Dubbo的服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。
6. Dubbo里面有几种节点角色?
节点 |
角色说明 |
Provider |
暴露服务的服务提供方 |
Consumer |
调用远程服务的服务消费方 |
Registry |
服务注册与发现的注册中心 |
Monitor |
统计服务的调用次数和调用时间的监控中心 |
Container |
服务运行容器 |
7.服务注册与发现的流程图?
8.Dubbo核心的配置有哪些?
配置 |
配置说明 |
解释 |
|
服务配置 |
用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 |
|
引用配置 |
用于创建一个远程服务代理,一个引用可以指向多个注册中心 |
|
协议配置 |
用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 |
|
应用配置 |
用于配置当前应用信息,不管该应用是提供者还是消费者 |
|
模块配置 |
用于配置当前模块信息,可选 |
|
注册中心配置 |
用于配置连接注册中心相关信息 |
|
监控中心配置 |
用于配置连接监控中心相关信息,可选 |
|
提供方配置 |
当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选 |
|
消费方配置 |
当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选 |
|
方法配置 |
用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息 |
|
参数配置 |
用于指定方法参数配置 |
不同粒度配置的覆盖关系
以 timeout 为例,下图显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似:
方法级优先,接口级次之,全局配置再次之。
如果级别一样,则消费方优先,提供方次之。
其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。
(建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置)。
理论上 ReferenceConfig 中除了interface
这一项,其他所有配置项都可以缺省不配置,框架会自动使用ConsumerConfig,ServiceConfig, ProviderConfig等提供的缺省配置。
在 Provider 上可以配置的 Consumer 端的属性有哪些?
1)timeout:方法调用超时
2)retries:失败重试次数,默认重试 2 次
3)loadbalance:负载均衡算法,默认随机
4)actives 消费者端,最大并发调用限制
9. Dubbo有哪几种集群容错方案?
集群容错方案 |
说明 |
Failover Cluster |
失败自动切换,自动重试其他服务器(默认) |
Failfast Cluster |
快速失败,立即报错,只发起一次调用 |
Failsafe Cluster |
失败安全,出现异常时,直接忽略 |
Failback Cluster |
失败自动恢复,记录失败请求,定时重发 |
ForKing Cluster |
并行调用多个服务器,只要一个成功即返回 |
Broadcast Cluster |
广播逐个调用所有提供者,任意一个报错则报错 |
10.Dubbo有哪几种负载均衡策略?
负载均衡策略 |
说明 |
Random LoadBalance |
随机,按权重设置随机概率(默认) |
RoundRobin LoadBalance |
轮训,按公约后的权重设置轮询比率 |
LeastActive LoadBalance |
最少活跃调用数,相同或约束的随机 |
ConsistentHash LoadBalance |
一致性Hash,相同参数的请求总是发送到同一提供者 |
11.当一个服务接口有多种实现时怎么做?
可以使用group属性来分组,服务提供方和消费方都指定同一个group即可。
12.Dubbo服务之间的调用是阻塞的吗?
默认是同步等待结果阻塞的,支持异步调用。
Dubbo是基于NIO的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个Future对象。
13.说说 Dubbo 服务暴露的过程
Dubbo会在Spring实例化Bean之后,在刷新容器最后一步发布ContextRefreshEvent事件,通知实现了ApplicationListener的ServiceBean类进行回调onApplicationEvent事件方法,Dubbo会在这个方法中调用ServiceBean父类ServiceConfig的export方法,从而实现了服务发布。