1. 程式人生 > >springcloud-feign實現服務發現

springcloud-feign實現服務發現


簡單介紹
springcloud使用服務發現進行服務間呼叫。對外使用閘道器gateway遮蔽分流轉發介面。服務發現客戶端到註冊中心拉取服務列表實現客戶端負載均衡。客戶端實現負載均衡主要有兩種方式。一種是ribbon另一種是基於ribbon封裝的feign。這是feign官方的解釋 s_c_1 我總結了一下主要有一下幾個優點:
(1)可插拔的註解支援,包括Feign註解和JAX-RS註解;
(2)支援可插拔的HTTP編碼器和解碼器;
(3)支援Hystrix和它的Fallback;
(4)支援Ribbon的負載均衡;
(5)支援HTTP請求和相應的壓縮。

微服務呼叫常用概念
(1)服務降級:
    當伺服器壓力劇增的情況下,根據實際業務情況及流量,對一些服務和頁面有策略測不處理或換種簡單的方式處理,從而釋放資源以保證核心交易正常運作成高效運作。

(2)斷路:
    熔斷這一概念來自於電子工程中的斷路器(circuit Breaker)。在網際網路系統中,當下遊服務因訪問壓力過大而相應變慢或者失敗,上游為了保護系統整體的可用性,可以暫時切斷對下游服務的呼叫。 簡單理解就是降級是針對業務,斷路是上下游故障。
(3)冪等性:
    就是使用者對於同一操作發起的一次請求或者多次請求的結果是一致的,不會因為多次點選而產生了副作用。

使用方式
下面我們開始feign的使用:
(1)新增springcloudalibaba和openfeign的依賴
     <dependency>
        <groupid>org.springframework.cloud</groupid>

        <artifactid>spring-cloud-starter-openfeign</artifactid>      </dependency>
     <dependency>
        <groupid>org.springframework.cloud</groupid>
        <artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid>
     </dependency>

(2)添加註解 @EnableDiscoveryClient開啟服務發現,註解 @EnableFeignClients支援feign客戶端。

s_c_2 用@FeignClient("serviceName")註解在對外的介面上,這樣介面就支援呼叫服務,因此支援熱插拔。serviceName使用註冊中心被呼叫的服務名字。@RequestMapping註解的方法是服務提供方的介面方法,看起來是不是和springmvc使用方法很像,沒錯因為這是feign對mvc支援的一種契約。feign預設是@RequestLine。它可以支援各種契約。同樣子,他可以使用預設的HttpUrlConnection也可以使用httpclient或者okhttp3.

(3)修改application.peoperties配置檔案     #服務名字
    ----- spring.application.name=feign-service
    #服務無埠0會隨機選擇一個
    ----- server.port=0
    #服務叢集名字
    ---- spring.cloud.nacos.discovery.cluster-name=consumer-service     #nacos註冊中心地址
    ----- spring.cloud.nacos.discovery.server-addr=nacos.blog.ailijie.top
      ok,完成。下面是feign的高階使用

feign高階使用

(1)feign日誌配置
s_c_3 建立feign日誌級別,還有feign的重試機制,這樣feign可以使用重試機制同時把每一次的請求用日誌記錄下來。
(2)feign的斷路
s_c_4 在feignclient註解中配置fallbackFactory工廠,進行斷路解決。使用factory的好處是可以處理異常資訊。還可以使用fallback處理。如果使用fallback,fallbackFactory將不會生效。看一下,Factory s_c_5 需要返回一個IProviderService的實現類,在create方法裡可以處理異常。這樣在服務端發生異常或者下線後,將會走斷路方法。
(2)feign的高階配置
    #開啟okhttp
    ----- feign.okhttp.enabled=true
    #開啟hystrix斷路,不開啟feign的降級不生效
    ----- feign.hystrix.enabled=true

    #hystrix斷路超時時間
    ----- hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 2000

    ----- provider-service.ribbon.ConnectTimeout = 1000
    ----- provider-service.ribbon.ReadTimeout = 1000
    #對所有操作請求都進行重試
    ----- provider-servicee.ribbon.OkToRetryOnAllOperations = true
    #切換例項的重試次數
    ----- provider-service.ribbon.MaxAutoRetriesNextServer = 2

    #對當前例項的重試次數
    ----- provider-service.ribbon.MaxAutoRetries = 1
    #設定日誌級別
    ----- logging.level.com.wotrd.feignservice.service.IProviderService=DEBUG
    斷路的超時時間需要大於讀超時時間,不然重試不生效。

    未完待續,接下來將會更新springmvc全域性異常處理和springdataflow。有問題請留言。
    個人部落格地址 https://blog.ailijie.top/archives/