背景: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); } } }
現在停掉服務:
控制台打印了日志,證明方法被調用到:
此時注冊中心已經沒該服務了