hsf 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" />









你可能感兴趣的:(hsf dubbo学习九--服务降级,优雅停机,日志)