dubbo

Dubbo 调用是同步的吗?

默认同步

Dubbo 的异常处理机制?

dubbo的异常处理类是com.alibaba.dubbo.rpc.filter.ExceptionFilter

1)如果provider实现了GenericService接口,直接抛出

2)如果是checked异常,直接抛出

3)在方法签名上有声明,直接抛出

4)异常类和接口类在同一jar包里,直接抛出

5)是JDK自带的异常,直接抛出

6)是Dubbo本身的异常,直接抛出

7)否则,包装成RuntimeException抛给客户端

网上有些文章对7)的处理有疑问,不理解原因,其实就是为了防止客户端反序列化失败.前面几种情况都能保证反序列化正常.

Dubbo 如何做参数校验?

参数验证功能是基于 JSR303 实现的,用户只需标识 JSR303 标准的验证 annotation,并通过声明 filter 来实现验证。

参数校验功能,通过参数校验过滤器 ValidationFilter 来实现。

Dubbo 可以对调用结果进行缓存吗?

Dubbo 通过 CacheFilter 过滤器,提供结果缓存的功能

Dubbo 目前提供三种实现:

lru :基于最近最少使用原则删除多余缓存,保持最热的数据被缓存。
threadlocal :当前线程缓存,比如一个页面渲染,用到很多 portal,每个 portal 都要去查用户信息,通过线程缓存,可以减少这种多余访问。
jcache :与 JSR107 集成,可以桥接各种缓存实现。

注册中心挂了还可以通信吗?

可以。对于正在运行的 Consumer 调用 Provider 是不需要经过注册中心,所以不受影响。并且,Consumer 进程中,内存已经缓存了 Provider 列表

那么,此时 Provider 如果下线呢?如果 Provider 是正常关闭,它会主动且直接对和其处于连接中的 Consumer 们,发送一条“我要关闭”了的消息。那么,Consumer 们就不会调用该 Provider ,而调用其它的 Provider 。

如果 Consumer 重启,依然能够通过本地缓存的文件,获得到 Provider 列表。

Dubbo 在 Zookeeper 存储了哪些信息?

provider和consumer分别写入自己的URL

Dubbo Consumer 只能调用从注册中心获取的 Provider 么?

在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连

Dubbo 支持哪些通信协议?

【重要】dubbo://

【重要】rest://

rmi://

webservice://

hession://

redis://

...

fd3d0521916fba2758b6e8883b8332affeb.jpg

什么是本地暴露和远程暴露,他们的区别?

本地调用使用了 injvm:// 协议,是一个伪协议,它不开启端口,不发起远程调用,只在 JVM 内直接关联,但执行 Dubbo 的 Filter 链.

举个例子,Spring Boot Controller 调用 Service 逻辑,就变成了调用 Dubbo Service Proxy 对象。这样,如果未来有一天,本地 Dubbo Service 迁移成远程的 Dubbo Service ,只需要进行配置的修改,而对 Controller 是透明的。

Dubbo 支持哪些序列化方式?

【重要】Hessian2 :基于 Hessian 实现的序列化拓展。dubbo:// 协议的默认序列化方案。

Dubbo 自己实现的序列化拓展。

Dubbo 有哪些负载均衡策略?

四种

【默认】Random LoadBalance:按权重设置随机概率。

RoundRobin LoadBalance:按公约后的权重设置轮询比率,存在慢的提供者累积请求的问题。

LeastActive LoadBalance:最少活跃调用数,使慢的提供者收到更少请求

ConsistentHash LoadBalance:一致性 Hash,相同参数的请求总是发到同一提供者,当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

Dubbo 有哪些集群容错策略?

六种

Failover Cluster:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。

Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录

Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。

Dubbo 有哪些动态代理策略?

Dubbo 使用的是Javassit 字节码 bytecode 生成方式。

Dubbo SPI 的设计思想是什么?

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3300976/blog/3032212

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值