服务端
1、从zookeeper移除注册的服务
Close all registries、Destroy registry、Unregister、Unsubscribe
2、关闭spring容器
调用了spring的ClassPathXmlApplicationContext.stop,close方法
rabbit Mq在同一线程内也打印了一段log,Waiting for workers to finish,等待工作的线程完成
数据源也关闭掉了, {dataSource-3} closed
3、关闭ZkClient
Closing ZkClient
4、关闭dubbo服务和netty
Close dubbo server,Close NettyServer bind
5、关闭到其他服务的连接,以及rpc引用
Close dubbo connect,Close netty channel,Destroy reference
6、关闭暴露的服务
Unexport service
7、断开虚拟机
正在调用的消费方:
1、接收到来自zookeeper服务下线的事件
对应服务端的第一条
2、关闭正在调用该服务的通道
Close netty channel,disconected from服务端口
3、超时抛出异常
超时应该有专门的线程存活监听
4、摧毁下线服务的消费方
Destroy unregister url consumer
5、关闭zookeeper
Closing ZooKeeper
6、关闭到其他服务的连接
Close dubbo connect
得出结论:
服务方不会等待正在调用的消费方完成再去关闭服务。即服务端程序可能正在执行到某一行而突然结束,消费方的调用程序会抛出超时异常。