向注册中心写入动态配置覆盖规则:(通过由监控中心或治理中心的页面完成)
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