Dubbo
【黑马程序员Dubbo快速入门,Java分布式框架dubbo教程】
4 Dubbo 高级特性
文章目录
- Dubbo
- 4 Dubbo 高级特性
- 4.2 Dubbo 常用高级配置
- 4.2.7 集群容错
- 4.2.8 服务降级
4.2 Dubbo 常用高级配置
4.2.7 集群容错
【一个场景】
现在 服务 提供者 部署成 了一个集群,分别在B、C、D的机器
当然A 消费者就会 去调用 这个 集群 中的服务提供者
如果现在,A 调用 B 出错了 【如何处理?】
【Dubbo 集群容错模式】
集群容错模式:
- Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器 ,默认重试2次,使用 retries 配置。一般用于读操作
【试试这个】
同样 需要启动三个 机器
① 机器1
OK,启动
② 机器2
OK,直接启动
③ 机器3 【不让它 睡,即不超时】
OK,直接启动
OK,看看Dubbo 控制台
OK, 3 个
现在 设置 集群 属性
其实不配 也是 这个,默认 重试 两次
启动web 进行测试
访问测试
OK, 数据是拿到了
但是现在只有 3 号
再试试
OK,这一次,3 台 都访问了,一下,因为进行了重试
虽然web 里面报 超时 了【默认1 s 超时,之前我们 已经看过了 】
【这就是 集群容错的 第一种 策略】
- Failfast Cluster :快速失败,只发起一次调用,失败立即报错。通常用于写操作。
- Failsafe Cluster :失败安全,出现异常时,直接忽略。返回一个空结果。
- Failback Cluster :失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
- Forking Cluster :并行调用多个服务器,只要一个成功即返回。
- Broadcast Cluster :广播调用所有提供者,逐个调用,任意一台报错则报错。
当然这些东西莫要 死记硬背,学会查 官方文档
https://dubbo.apache.org/zh/docsv2.7/user/examples/fault-tolerent-strategy/
其实都在这儿,OK,这就是 Dubbo 的集群容错
4.2.8 服务降级
【举个栗子】
一个B 机器,里面部署了 三个 服务,简单从重要 程度来看,支付 服务是 最重要的
后面就由 消费者 来调用 这些服务
什么叫 服务降级呢?
比如说,现在这个机器的性能 已经飚满 了,马上 就要崩了
这个时候我们的 运维人员 就要考虑 把那些不是 很重要的服务关闭掉,释放掉资源,以保证 核心的业务服务不会崩掉 正常运行。【这个 就称为 服务降级】
【服务降级方式】
官方文档: https://dubbo.apache.org/zh/docsv2.7/user/examples/service-downgrade/
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
registry.register(URL.valueOf("override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&mock=force:return+null"));
- mock=force:return null表示消费方对该服务的方法调用都直接返回null值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。
- mock=fail:return null表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。
【试试】
这样一个 会引起超时的服务
直接启动
OK
配置降级 策略,在消费者 那边
这样的意思就是说, 不再调用 UserService 的服务
直接启动测试
OK,浏览器访问
OK,啥也没有
而且 提供者那边 也没有任何 的输出【这说明什么, 说明压根儿 没调】【直接屏蔽了 】
换 成另一个
这下就会调 了
失败了, 并且报错了
看看提供者那边
确实调用了,而且 重试了 两次
【这就是 服务降级了】
OK,Dubbo 撒花。Zookeeper 见!