Eureka源码分析
Eureka源碼分析
?
?
入口:
?
?
?
Spring.factories
?
?
PS:
意味著如果加載EurekaServerAutoConfiguration成功,需要
@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)需加載成功.
?
通過@Bean注入了很多類
?
?
本質上, eureka-server包含很多事件:
| EurekaInstanceCanceledEvent | 服務下線事件 |
| EurekaInstanceRegisteredEvent | 服務注冊事件 |
| EurekaInstanceRenewedEvent | 服務續約事件 |
| EurekaRegistryAvailableEvent | Eureka注冊中心啟動事件 |
| EurekaServerStartedEvent | Eureka server啟動事件 |
?
Java擴展: EventObject->EventListener
?
包含注冊\下線\續約等
事件注冊之前, 需要有監聽器, eureka所用的監聽器是EurekaEventListener
?
針對上面五個事件, 我們可以自定義監聽器
?
package com.macro.cloud;
import com.netflix.appinfo.InstanceInfo;
import org.springframework.cloud.netflix.eureka.server.event.*;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
public class EurekaStateChangeListener {
??? @EventListener
??? public void listen(EurekaInstanceCanceledEvent eurekaInstanceCanceledEvent) {
??????? //服務斷線事件
??????? String appName = eurekaInstanceCanceledEvent.getAppName();
??????? String serverId = eurekaInstanceCanceledEvent.getServerId();
??????? System.out.println(appName);
??? ????System.out.println(serverId);
??????? System.out.println("EurekaInstanceCanceledEvent");
??? }
??? @EventListener
??? public void listen(EurekaInstanceRegisteredEvent event) {
??????? InstanceInfo instanceInfo = event.getInstanceInfo();
??????? System.out.println(instanceInfo);
??????? System.out.println("EurekaInstanceRegisteredEvent");
??? }
??? @EventListener
??? public void listen(EurekaInstanceRenewedEvent event) {
??????? event.getAppName();
??????? event.getServerId();
??????? System.out.println("EurekaInstanceRenewedEvent");
??? }
??? @EventListener
??? public void listen(EurekaRegistryAvailableEvent event) {
??????? System.out.println("EurekaRegistryAvailableEvent");
??? }
??? @EventListener
??? public void listen(EurekaServerStartedEvent event) {
??????? System.out.println("EurekaServerStartedEvent");
??????? //Server啟動
??? }
}
?
?
其中eureka-server啟動時候, 會出發最后兩個事件, 即:
EurekaRegistryAvailableEvent 和 EurekaServerStartedEvent.
當eureka-client啟動后, 會出發EurekaInstanceRegisteredEvent事件.
?
Eurekaserver總結如下:
?
?
ApplicationListenerMethodAdapter.java
?
Eureka-client 底層是要了jerseyClient
?
Builder resourceBuilder = jerseyClient.resource(serviceUrl).path(urlPath).getRequestBuilder();
addExtraHeaders(resourceBuilder);
response = resourceBuilder
??????? .header("Accept-Encoding", "gzip")
??????? .type(MediaType.APPLICATION_JSON_TYPE)
??????? .accept(MediaType.APPLICATION_JSON)
??????? .post(ClientResponse.class, info);
?
?
歡迎關注公眾號:? 戲說碼農職場
?
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Eureka源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一个pypi项目发布成功
- 下一篇: qemu-img————QEMU的磁盘管