springCloud(22):Eureka总结提升
一、Eureka原理粗講
二、Eureka幾大事件
EurekaInstanceCanceledEvent:失效事件。
EurekaInstanceRegisteredEvent:注冊事件。
EurekaInstanceRenewedEvent:心跳事件。
EurekaRegistryAvailableEvent:可用事件。
EurekaServerStartedEvent:啟動事件。
ApplicationListener:Spring事件監(jiān)聽器 服務(wù)擴展失效通知。
代碼如下:代碼文件在Eureka-server端
package?com.github.wxiaoqi.security.center.listener;import?com.netflix.discovery.shared.Applications; import?com.netflix.eureka.EurekaServerContextHolder; import?com.netflix.eureka.registry.PeerAwareInstanceRegistry; import?org.slf4j.Logger; import?org.slf4j.LoggerFactory; import?org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceCanceledEvent; import?org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRegisteredEvent; import?org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRenewedEvent; import?org.springframework.cloud.netflix.eureka.server.event.EurekaRegistryAvailableEvent; import?org.springframework.context.ApplicationEvent; import?org.springframework.context.ApplicationListener; import?org.springframework.context.annotation.Configuration; import?org.springframework.scheduling.annotation.EnableScheduling;/***?用于監(jiān)聽eureka服務(wù)停機通知*?@Description:用于監(jiān)聽eureka服務(wù)停機通知*?@Date:11:25?2017/11/10*/ @Configuration @EnableScheduling public?class?EurekaInstanceCanceledListener?implements?ApplicationListener?{private?Logger?log?=?LoggerFactory.getLogger(EurekaInstanceCanceledListener.class);@Overridepublic?void?onApplicationEvent(ApplicationEvent?applicationEvent)?{//?服務(wù)掛掉事件if?(applicationEvent?instanceof?EurekaInstanceCanceledEvent)?{EurekaInstanceCanceledEvent?event?=?(EurekaInstanceCanceledEvent)?applicationEvent;//?獲取當(dāng)前Eureka實例中的節(jié)點信息PeerAwareInstanceRegistry?registry?=?EurekaServerContextHolder.getInstance().getServerContext().getRegistry();Applications?applications?=?registry.getApplications();//?遍歷獲取已注冊節(jié)點中與當(dāng)前失效節(jié)點ID一致的節(jié)點信息applications.getRegisteredApplications().forEach((registeredApplication)?->?{registeredApplication.getInstances().forEach((instance)?->?{if?(instance.getInstanceId().equals(event.getServerId()))?{log.info("服務(wù):"?+?instance.getAppName()?+?"?掛啦。。。");//?//?TODO:?2017/9/3?擴展消息提醒?郵件、手機短信、微信等}});});}if?(applicationEvent?instanceof?EurekaInstanceRegisteredEvent)?{EurekaInstanceRegisteredEvent?event?=?(EurekaInstanceRegisteredEvent)?applicationEvent;log.info("服務(wù):"?+?event.getInstanceInfo().getAppName()?+?"?注冊成功啦。。。");}if?(applicationEvent?instanceof?EurekaInstanceRenewedEvent)?{EurekaInstanceRenewedEvent?event?=?(EurekaInstanceRenewedEvent)?applicationEvent;log.info("心跳檢測服務(wù):"?+?event.getInstanceInfo().getAppName()?+?"。。");}if?(applicationEvent?instanceof?EurekaRegistryAvailableEvent)?{log.info("服務(wù)?Aualiable。。");}} }測試效果:
1:啟動Eureka-server
?
2:啟動Eureka-client:user-center
?
3:關(guān)閉Eureka-client:user-center
?
三、Eureka常見問題
踢出已關(guān)停的節(jié)點
由于Eureka自我保護模式,以及心跳周期長的原因,常常會遇到Eureka Server不踢出已關(guān)停的節(jié)點的問題。
server端:
eureka:server:enable-self-preservation:?false??????????#?設(shè)為false,關(guān)閉自我保護eviction-interval-timer-in-ms:?4000????#?清理間隔(單位毫秒,默認60*1000)client端:
eureka:client:service-url:defaultZone:?http://localhost:8761/eureka/healthcheck:enabled:?true???????#?開啟健康檢查(需要spring-boot-starter-actuator依賴)instance:lease-renewal-interval-in-seconds:?10?????#?租期更新時間間隔(默認30秒)lease-expiration-duration-in-seconds:?30??#?租期到期時間(默認90秒)多網(wǎng)卡環(huán)境下的IP選擇問題
Eureka會選擇IP合法(標(biāo)準ipv4地址)、索引值最小(eth0,eht1中eth0優(yōu)先)且不在忽略列表中(可在application配置文件中配置忽略哪些網(wǎng)卡)的網(wǎng)卡地址作為服務(wù)IP。
配置:(????)
eureka:instance:#?多網(wǎng)卡制定IP,docker部署推薦ip-address:?127.0.0.1??????????????#?手動指定IP地址prefer-ip-address:?true???????????#?注冊時使用ip而不是主機名服務(wù)感知慢
Eureka的wiki上有一句話,大意是一個服務(wù)啟動后最長可能需要2分鐘時間才能被其它服務(wù)感知。
eureka.instance.leaseRenewallntervallnSecods(在生產(chǎn)中,最好堅持使用默認值,因為在服務(wù)器內(nèi)部有一些計算,他們對續(xù)約做出假設(shè))。
轉(zhuǎn)載于:https://blog.51cto.com/1754966750/1980628
總結(jié)
以上是生活随笔為你收集整理的springCloud(22):Eureka总结提升的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟机中安装GHO文件配置说明
- 下一篇: 使用 utmpdump 监控 CentO