您的位置:首页 > 其它

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

2017-01-05 15:02 246 查看
向注册中心写入动态配置覆盖规则:(通过由监控中心或治理中心的页面完成)

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" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: