1. 程式人生 > 其它 >consul註冊中心如何自動剔除下線服務

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); } } }

現在停掉服務:

控制檯列印了日誌,證明方法被呼叫到:

此時註冊中心已經沒該服務了