consul註冊中心如何自動剔除下線服務
阿新 • • 發佈:2021-08-03
背景:consul註冊中心,對已經下線的服務不會立刻剔除,過了很久才會剔除,這樣會導致很多問題,例如a服務明明已經下線,但還在註冊中心註冊,這樣其他服務可能就會訪問到該服務
處理思路:我們可以監聽spring的關閉事件,然後在該監聽方法中剔除下線的服務即可:
註冊中心已經有2個服務,第二個是我本地啟動的服務,那麼我們如何剔除它呢:
@Component public class ServiceCloseUnRegisterService { @Autowired(required = false) private ConsulServiceRegistry consulServiceRegistry; @Autowiredprivate ConsulRegistration reg; @EventListener(ContextClosedEvent.class) public void doUnRegister(ContextClosedEvent contextClosedEvent){ System.out.println("這是註冊物件。。。。。。。。。。。。。。。"+consulServiceRegistry.getClass()); if(null!=consulServiceRegistry){ consulServiceRegistry.deregister(reg); } } }
現在停掉服務:
控制檯列印了日誌,證明方法被呼叫到:
此時註冊中心已經沒該服務了