转:https://blog.csdn.net/Y0Q2T57s/article/details/83005376
1、Dubbo是什么?
dubbo是 阿里巴巴开源的一个基于JAVA的RPC分布式框架,已经捐赠给apache基金会。
2、为什么要用Dubbo?
dubbo已经 经过阿里双十一的历练,以及很多国内互联网企业的使用,足够稳定可靠。 底层使用 netty通信, 使用zooKeeper作为注册中心 治理服务。
使用dubbo能够 把核心业务单独拆分出来,作为一个独立的服务存在,给其他业务提供依赖。 该分布式设计,能大大提高系统的并发吞吐量和性能。
3、Dubbo 和 Spring Cloud 有什么区别?
两者没关联:
区别1:通信方式不同,Dubbo使用的是 RPC通信,spring cloud使用的是 http restFul通信。
区别2:组成部分不一样: dubbo的组成只有 注册中心zk和服务监控dubbo-monitor , 但是spring cloud的组件就非常多。
4、dubbo都支持什么协议,推荐用哪种?
dubbo支持的协议很多,包括dubbo,http,webphere协议, 推荐使用dubbo协议(为什么?)
因为dubbo缺省协议 使用的是单一长连接以及nio异步通信,适合并发高的小数据量的服务调用,以及消费者服务机器远大于生产者的情况。
缺省协议,使用基于mina1.1.7+hessian3.2.1的tbremoting交互(注意:可能不同的dubbo版本不一样)。
连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO异步传输
序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
适用场景:常规远程服务方法调用
5 Dubbo需要 Web 容器吗?
不需要,可以使用Dubbo框架提供的Main方法运行。
具体运行案例,看以下网址:
https://blog.csdn.net/u013168445/article/details/71194666
使用Web容器启动也行。
6、Dubbo内置了哪几种服务容器?
-
Spring Container
-
Jetty Container
-
Log4j Container
该网址 详细讲述了 dubbo的SPI以及Main函数的启动。
https://blog.csdn.net/wender/article/details/79504835
7、Dubbo里面有哪几种节点角色?
Provider:服务提供者
Consumer:服务消费者
monitor:监控中心
register:服务注册中心与服务发现中心
container:服务运行容器
8、画一画服务注册与发现的流程图
第一步:在容器container中 启动provider
第二步:provider 服务提供者 将服务注册到register注册中心
第三步:consumer 订阅subscribe 注册中心的服务
第四步:注册中心返回(notify通知)consumer订阅的服务的地址,由consumer调用provider的地址来调用provider的服务。
第五步:监控中心monitor 监控注册中心register中的注册服务与消费服务的情况
9、Dubbo默认使用什么注册中心,还有别的选择吗?
dubbo默认使用zookeeper作为注册中心,还有redis,simple, muticast等注册中心,但是不推荐。
10、Dubbo有哪几种配置方式?
- XML 配置文件方式
- properties 配置文件方式
- annotation 配置方式
- API 配置方式
1)Spring 配置方式
2)Java API 配置方式 参考答案不精确
这篇文章不错: http://www.cnblogs.com/chanshuyi/p/5144288.html
11、Dubbo 核心的配置有哪些?
对比dubbo*.xml文件 与 核心配置的表格,更加好记忆:
<dubbo:monitor protocol="registry" />
<dubbo:application name="${dubbo.application.name}" />
<dubbo:registry server="zkRegistry" protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}" file="${dubbo.registry.file}" />
<dubbo:protocol port="${dubbo.protocol.port}" />
<dubbo:provider timeout="${dubbo.provider.timeout}" />
<dubbo:consumer check="false" timeout="${dubbo.consumer.timeout}"/>
<!-- 订单接口 -->
<dubbo:service interface="cn.com.weidai.oxen.facade.GoodsCodeMenuFacade"
ref="goodsCodeMenuFacade"/>
<dubbo:service interface="cn.com.weidai.oxen.facade.JxdContactInfoFacade"
ref="jxdContactInfoFacade"/>
<!--<bean id="goodsCodeMenuFacade"-->
<!--name="cn.com.weidai.oxen.facade.GoodsCodeMenuFacade"></bean>-->
<!--影像中心接口-->
<dubbo:reference interface="cn.com.weidai.image.api.ImageInterFace" id="imageInterFace" timeout="100000"/>
12、在 Provider 上可以配置的 Consumer 端的属性有哪些?
1)timeout:方法调用超时
2)retries:失败重试次数,默认重试 2 次
3)loadbalance:负载均衡算法,默认随机
4)actives 消费者端,最大并发调用限制
provider.xml的配置:
<dubbo:service timeout="4000" retries="0" interface="com.dingding.tms.bms.service.BillingZfbCodOrderService" ref="billingZfbCodOrderService" registry="globalRegistry"/>
参考网址: https://blog.csdn.net/lkforce/article/details/54380201
13、Dubbo启动时如果依赖的服务不可用会怎样?
Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,默认 check="true",可以通过 check="false" 关闭检查。
参考网址: https://blog.csdn.net/shenhaiwen/article/details/73548612
14、Dubbo推荐使用什么序列化框架,你知道的还有哪些?
推荐使用Hessian序列化,还有Duddo、FastJson、Java自带序列化。
为什么使用Hessian的网址:
https://www.cnblogs.com/sunnyfarmer/articles/2228040.html
15、Dubbo默认使用的是什么通信框架,还有别的选择吗?
Dubbo 默认使用 Netty 框架,也是推荐的选择,另外内容还集成有Mina、Grizzly。
为什么使用netty的原因: https://www.jianshu.com/p/12826f1e10c2
16、Dubbo有哪几种集群容错方案,默认是哪种?
failOver cluter: 失败自动切换,自动重试其他服务器(默认)
failFast: 快速失败,立即报错,只有一次调用
17、Dubbo有哪几种负载均衡策略,默认是哪种?
随机 random
轮询 roundrobin
最少活跃 least active 网址:https://blog.csdn.net/revivedsun/article/details/71330126
一致性hash: https://www.cnblogs.com/lpfuture/p/5796398.html
http://www.zsythink.net/archives/1182 (多看几遍)
hashCode: https://www.cnblogs.com/dolphin0520/p/3681042.html
理解 hashcode 和 hash 算法:https://blog.csdn.net/qq_38182963/article/details/78940047
18、注册了多个同一样的服务,如果测试指定的某一个服务呢?
可以配置环境点对点直连,绕过注册中心,将以服务接口为单位,忽略注册中心的提供者列表。
有空 跑一下网址的代码 验证: https://blog.csdn.net/qq_14908027/article/details/81135038
19、Dubbo支持服务多协议吗?
Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议。
20、当一个服务接口有多种实现时怎么做?
当一个接口有多种实现时,可以用 group 属性来分组,服务提供方和消费方都指定同一个 group 即可。
有空 跑一下网址的代码 验证:https://blog.csdn.net/u010317829/article/details/52149527