前言
看圖:
現在開發節奏如此緊張,大多數人為了跟得上靈活的節奏,也就無形中丢掉了對技術整合的更多的拓展學習。
那麼,我選擇 小白文科普。
不管這些東西是否簡單還是複雜,隻要存在有人為了解,那麼我就發文,至少能讓我的看客都知道還有一些有緣的看客知道。
正文
直接看源碼:
InstanceRegistry.java
ps: 還有很多人不會看源碼 ,例如想找 InstanceRegistry 這個代碼,idea 操作大緻就是這樣:
回到剛才的内容,可以看到 InstanceRegistry裡面很多方法,
register
cancel : 下線 ,client項目 突然挂了或者沒了,觸發調用的方法
renew
我們直接拿 register方法看 ,
handleRegistration :
再看一個cancel:
renew 也是 :
那麼到這,其實我們如果了解spring的 事件釋出 ,那麼看到這裡,你已經知道怎麼玩這些事件了。
但是未免有的看客就是沒了解,那麼沒關系 ,可以往下看,或者直接看我這篇 :
SpringBoot 事件釋出監聽機制使用、分析、注意點 (一篇到位)_默默不代表沉默_springboot 事件監聽
那麼我們直接上代碼:
MyStateListener.java
import com.netflix.appinfo.InstanceInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.netflix.eureka.server.event.*;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
/**
* @Author JCccc
* @Description
* @Date 2020/09/10 9:22
*/
@Component
public class MyStateListener {
private final static Logger log = LoggerFactory.getLogger(MyStateListener.class);
@EventListener
public void registerListen(EurekaInstanceRegisteredEvent event) {
InstanceInfo instanceInfo = event.getInstanceInfo();
log.info("服務名={}注冊上來了", instanceInfo.getAppName());
log.info("服務的host名={}",instanceInfo.getHostName());
log.info("服務的ip位址={}",instanceInfo.getIPAddr());
log.info("服務的端口={}",instanceInfo.getPort());
log.info("做一些【注冊】相關的業務邏輯......");
log.info("做一些【注冊】相關的業務邏輯......");
}
@EventListener
public void canceledListen(EurekaInstanceCanceledEvent event) {
log.info("服務名={}下線了", event.getAppName());
log.info("server位址資訊{}", event.getServerId());
log.info("做一些【下線】相關的業務邏輯......");
log.info("做一些【下線】相關的業務邏輯......");
}
@EventListener
public void renewedListen(EurekaInstanceRenewedEvent event) {
log.info("服務名={}進行續約", event.getServerId() +" "+ event.getAppName());
log.info("做一些【續約】相關的業務邏輯......");
log.info("做一些【續約】相關的業務邏輯......");
}
@EventListener
public void listen(EurekaRegistryAvailableEvent event) {
log.info("注冊中心啟動,{}", System.currentTimeMillis());
}
@EventListener
public void listen(EurekaServerStartedEvent event) {
log.info("注冊中心服務端啟動,{}", System.currentTimeMillis());
}
}
代碼簡單的介紹:
其實也沒什麼也就一個 @EventListener 注解, 然後配合 我們需要監聽的事件就行
EurekaInstanceRegisteredEvent
EurekaInstanceCanceledEvent
EurekaInstanceRenewedEvent
執行一下看看效果:
注冊:
續約:
下線: