javascript
怎么关闭eureka的服务_SpringCloud微服务踩坑系列之二
一.關于Eureka和Config服務的logback.xml配置文件問題
注意:在eureka和config服務中,如果使用logback.xml配置文件,會導致在服務啟動的時候出現如下warn警告信息,尤其是config服務,更嚴重的會導致服務無法啟動.
2018-10-09 15:09:32.738 WARN 8176 --- [ost-startStop-1] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2018-10-09 15:09:34.113 WARN 8176 --- [ main] o.s.c.n.a.ArchaiusAutoConfiguration : No spring.application.name found, defaulting to 'application' 2018-10-09 15:09:34.113 WARN 8176 --- [ main] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2018-10-09 15:09:34.971 WARN 8176 --- [ main] c.n.eureka.cluster.PeerEurekaNodes : The replica size seems to be empty. Check the route 53 DNS Registry二.關于"Process finished with exit code 0"的問題
在SpringBoot項目啟動時,控制臺中可能會出現"Process finished with exit code 0"這樣的日志信息,這樣的信息意味著你的程序正常執行完畢并退出。
可以科普一下exit code,在大部分編程語言中都適用.
exit code 0 表示程序執行成功,正常退出;
exit code 1 表示程序執行執行過程中遇到了某些問題或者錯誤,非正常退出.
在SpringBoot啟動時如果出現"Process finished with exit code 0",有可能是項目中沒有添加spring-boot-starter-web依賴包導致的.
解決方法,引入依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>三.RENEWALS ARE LESSER THAN THE THRESHOLD問題
啟動兩個client,過了一會,停了其中一個,訪問注冊中心時,界面上顯示了上面的警告信息:
Eureka server和client之間每隔30秒會進行一次心跳通信,告訴server,client還活著。由此引出兩個名詞:
Renews threshold:server期望在每分鐘中收到的心跳次數
Renews (last min):上一分鐘內收到的心跳次數。
前文說到禁止注冊server自己為client,不管server是否禁止,閾值(threshold)是1。client個數為n,閾值為1+2*n(此為一個server且禁止自注冊的情況)
如果是多個server,且開啟了自注冊,那么就和client一樣,是對于其他的server來說就是client,是要*2的
我開了兩個server,自注冊,相關數據如下
閾值:1+2*1
renews:
1)自注冊 2 + 2*1
2)非自注冊:2*1
Eurake有一個配置參數eureka.server.renewalPercentThreshold,定義了renews 和renews threshold的比值,默認值為0.85。當server在15分鐘內,比值低于percent,即少了15%的微服務心跳,server會進入自我保護狀態,Self-Preservation。在此狀態下,server不會刪除注冊信息,這就有可能導致在調用微服務時,實際上服務并不存在。
這種保護狀態實際上是考慮了client和server之間的心跳是因為網絡問題,而非服務本身問題,不能簡單的刪除注冊信息
stackoverflow上,有人給出的建議是:
1、在生產上可以開自注冊,部署兩個server
2、在本機器上測試的時候,可以把比值調低,比如0.49
3、或者簡單粗暴把自我保護模式關閉
四.TransportException: Cannot execute request on any known server問題
升級到新版的SpringCloud之后,當eureka注冊中心配置了security的依賴
<!--注意:SpringBoot項目遵循的是約定大于配置的原則,當此處添加了security的依賴后,就會自動啟用eureka的安全驗證功能,否則就不開啟--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId> </dependency>之后,可能會導致一些問題,比如就可能會導致在啟動eureka客戶端的時候產生"TransportException: Cannot execute request on any known server"異常,使得eureka客戶端無法連接注冊中心.原因是新版的security默認啟用了csrf檢驗,會對注冊到注冊中心的實例進行csrf攔截,所以在客戶端連接eureka注冊中心的時候,默認情況下會導致Cannot execute request on any known server問題
解決辦法:
1.在eureka服務端代碼中配置security的csrf檢驗為false; 2.客戶端中以用戶名密碼形式登錄:client:service-url:defaultZone: http://admin:syc@localhost:1001/eureka/@EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter {/*** 新版的security默認啟用了csrf檢驗,所以在客戶端連接eureka注冊中心的時候,默認情況下會導致 * Cannot execute request on any known server問題.* 解決辦法:* 1.在eureka服務端代碼中配置security的csrf檢驗為false;* 2.客戶端中以用戶名密碼形式登錄:* client:* service-url:* defaultZone: http://admin:syc@localhost:1001/eureka/*/@Overrideprotected void configure(HttpSecurity http) throws Exception {/*直接關閉crsf功能:http.csrf().disable();*//*對eureka的訪問放行*/http.csrf().ignoringAntMatchers("/eureka/**");super.configure(http);} }eureka:client:service-url:#defaultZone: http://localhost:1001/eureka/defaultZone: http://admin:syc@localhost:1001/eureka/總結
以上是生活随笔為你收集整理的怎么关闭eureka的服务_SpringCloud微服务踩坑系列之二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32如何执行软复位_stm32 上
- 下一篇: 请求成功得到返回数据还是走到catch_