SpringCloud使用總結

使用SpringCloud治理微服務是很方便的,demo級別的應用很容易實現,但是要在生產環境使用的話,需要熟悉其配置,避免採坑。


配置

1、使用okhttp代替默認的HttpClient,配置feign超時時間等

feign.okhttp.enabled=true

#這是默認設置也可以針對具體的serviceid設置`
feign.client.config.default.connectTimeout=1000
feign.client.config.default.readTimeout=3000
feign.client.config.default.loggerLevel=basic

使用okhttp後,必須要設置okhttp的最大idle數量和連接保活時間,不然會導致長連接的頻繁關閉,設置如下所示:

@Bean
@ConditionalOnProperty(name = "feign.okhttp.enabled")
@ConditionalOnMissingBean
public okhttp3.OkHttpClient getOkHttpClient() {
ConnectionPool connectionPool = new ConnectionPool(maxIdleConnections, keepAliveMiniutes, TimeUnit.MINUTES);
okhttp3.OkHttpClient client = new okhttp3.OkHttpClient.Builder().connectionPool(connectionPool)
.addInterceptor(new LoggerInterceptor(true))
.build();
return client;
}

2、ribbon的飢餓加載模式

ribbon默認情況下,只有當第一次訪問的時候,纔會從註冊中心加載serviceId的服務信息。

在生產環境下,系統啓動後,如果瞬間流量大的話,會導致請求處理緩慢的情況。

建議生產環境下,採用預加載模式。配置如下所示:

ribbon.eager-load.enabled=true
ribbon.eager-load.clients=spring-cloud-service #此處配置需要預加載的serviceId,逗號分隔

3、啓用hystrix斷路器功能

feign.hystrix.enabled=true

使用hystrix的需要實現對應的接口方法,做降級處理。

日常開發中,如果針對每個接口都寫一個實現fallback的方法會很麻煩,我們針對hystrix定製統一的fallback處理方法,返回json對象或者錯誤消息。如果有個性話的fallback,再單獨實現接口。

4、使用feign攔截器,給上游請求添加統一的header信息

5、使用okhttp攔截器,打印請求日誌

6、feign返回結果使用json編解碼

feign可以使用feign-gson類庫實現對請求返回結果進行json序列化。

配置如下所示:

需要單獨引入包:
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-gson</artifactId>
<version>10.10.1</version>
</dependency>

@Bean
@ConditionalOnProperty(name = "feign.decoder.json.enabled", matchIfMissing = true)
@ConditionalOnMissingBean
public Decoder feignDecoder() {
  return new GsonDecoder();
}

@Bean
@ConditionalOnProperty(name = "feign.encoder.json.enabled", matchIfMissing = true)
@ConditionalOnMissingBean
public Encoder feignEncoder() {
  return new GsonEncoder();
}

使用feign-gson後,接口的返回值必須得是json格式,否則會出現反序列化異常。
本demo使用fastjson類庫實現定製化的json decoder,並且解決接口返回String類型數據的情況。

需要關注的問題

  1. 服務的降級處理、熔斷處理,配置合理的閥值
  2. nacos註冊中心默認的心跳時間是5秒

具體參考spring-cloud-demo:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章