consul注册中心如何自动剔除下线服务

背景:consul注册中心,对已经下线的服务不会立刻剔除,过了很久才会剔除,这样会导致很多问题,例如a服务明明已经下线,但还在注册中心注册,这样其他服务可能就会访问到该服务

处理思路:我们可以监听spring的关闭事件,然后在该监听方法中剔除下线的服务即可:

 

 

 

 注册中心已经有2个服务,第二个是我本地启动的服务,那么我们如何剔除它呢:

@Component
public class ServiceCloseUnRegisterService {
    @Autowired(required = false)
    private ConsulServiceRegistry consulServiceRegistry;
    @Autowired
    private ConsulRegistration reg;

    @EventListener(ContextClosedEvent.class)
    public void doUnRegister(ContextClosedEvent contextClosedEvent){
        System.out.println("这是注册对象。。。。。。。。。。。。。。。"+consulServiceRegistry.getClass());
        if(null!=consulServiceRegistry){
            consulServiceRegistry.deregister(reg);
        }

    }
}

现在停掉服务:

 

 

 

 控制台打印了日志,证明方法被调用到:

 

 

 

 

此时注册中心已经没该服务了

 

posted @ 2021-08-03 19:44  yangxiaohui227  阅读(1700)  评论(0编辑  收藏  举报