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); } } }
现在停掉服务:
控制台打印了日志,证明方法被调用到:
此时注册中心已经没该服务了