motan-1:优雅关闭

2019-07-03 18:02:03 浏览数 (2)

(1).官方demo代码

1.Motan支持在Consul、ZooKeeper集群环境下优雅的关闭节点,当需要关闭或重启节点时,可以先将待上线节点从集群中摘除,避免直接关闭影响正常请求。

2.待关闭节点需要调用以下代码,建议通过servlet或业务的管理模块进行该调用。

MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, false)

(2).我们的代码

(3).问题与解决

1.问题

在web项目中没有在contextDestroyed的监听中调用motan的销毁反注册钩子,导致motan服务已经下线,但是zk中依然保留服务的注册信息,客户端不能及时感知到服务的下线,导致下线后依然打过来大量的请求,造成客户端阻塞或者报错。

2.解决方案

(4) .源码解析

1.开关及监听

官方推荐我们优雅关闭是推荐这句代码

代码语言:javascript复制
MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, false);

我们来看下Motan向MotanConstants.REGISTRY_HEARTBEAT_SWITCHER这个开关项注册了什么监听:

可见在Registry的抽象类中注册了这个开关的监听,当开关值变化后处理相应的动作,如果关闭,则触发unavailable方法,这个方法会注销所有的服务(在registry中删除所有的节点)。

2.这里我们以zookeeper的实现为例

监听触发后会注销所有的服务。

(5) .参考资料

1. motan source code:

https://github.com/weibocom/motan

0 人点赞