dubbo学习九--服务降级,优雅停机,日志

向注册中心写入动态配置覆盖规则:(通过由监控中心或治理中心的页面完成)

 

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值,不抛异常。
  • 容忍不重要服务不稳定时对调用方的影响

 

优雅停机

dubbo是通过JDK的shutdownHook来完成优雅停机的,所以如果用户使用kill -9 pid等强制关闭指令,是不会执行优雅停机的,只有通过kill pid时,才会执行。

 

 

原理:

  • 服务提供方:停止时,先标记为不接收新请求,新请求过来时直接报错,让客户端重试其它机器。然后,检测线程池中的线程是否正在运行,如果有,等待所有线程完成,除非超时,则强制关闭。
  • 服务消费方:停止时,不再发起新的调用请求,所有新的调用在客户端即报错。检测有没有请求的响应还没有返回,等待响应返回,除非超时,则强制关闭。

设置优雅停机超时时间,缺省超时时间是10秒:(超时则强制关闭)

<dubbo:application ...>

    <dubbo:parameter key="shutdown.timeout" value="60000" /> <!-- 单位毫秒 -->

</dubbo:application>

如果ShutdownHook不能生效,可以自行调用:

ProtocolConfig.destroyAll();

 

 

 

日志适配

缺少自动查找

  • log4j
  • slf4j
  • jcl
  • jdk

可以通过以下方式配置日志输出策略:

java -Ddubbo.application.logger=log4j

dubbo.properties

dubbo.application.logger=log4j

dubbo.xml

<dubbo:application logger="log4j" />

 

 

访问日志

可以通过以下方式配置日志输出策略:

java -Ddubbo.application.logger=log4j

dubbo.properties

dubbo.application.logger=log4j

dubbo.xml

<dubbo:application logger="log4j" />

 

将访问日志输出到当前应用的log4j日志:

<dubbo:protocol accesslog="true" />

将访问日志输出到指定文件:

<dubbo:protocol accesslog="foo/bar.log" />

 

 

 

最后欢迎大家访问我的个人网站:1024s

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值