通过服务发现可以做到无损关闭吗
如果服务在关闭前,通知注册中心下线,然后通过注册中心告知调用者,把该节点在负载均衡中下线。
服务发现在大规模集群中,只保证最终一致性,不保证强一致性,所以注册中心在收到服务提供方下线的时候,并不能成功保证把这次要下线的节点推送到所有的调用方。
所以,不可以做到无损关闭
服务提供者维护一个调用方连接集合
在服务节点要下线之前,挨个去通知服务的调用者,这样服务调用者就不会再使用这个节点了
服务提供者还需要设置一个请求挡板
因为可能服务调用者在收到下线通知之前一点点发送了请求,由于网络的延迟,可能到达服务提供者时执行这个服务的对象可能已经被销毁了,所以需要在这个地方设置一个请求挡板,当此时接收到请求时,就返回一个特定的异常