溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springcloud-feign中怎么實現(xiàn)一個服務發(fā)現(xiàn)功能

發(fā)布時間:2021-07-30 14:36:05 來源:億速云 閱讀:293 作者:Leah 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)springcloud-feign中怎么實現(xiàn)一個服務發(fā)現(xiàn)功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

springcloud使用服務發(fā)現(xiàn)進行服務間調(diào)用。對外使用網(wǎng)關(guān)gateway屏蔽分流轉(zhuǎn)發(fā)接口。服務發(fā)現(xiàn)客戶端到注冊中心拉取服務列表實現(xiàn)客戶端負載均衡??蛻舳藢崿F(xiàn)負載均衡主要有兩種方式。一種是ribbon另一種是基于ribbon封裝的feign。這是feign官方的解釋 springcloud-feign中怎么實現(xiàn)一個服務發(fā)現(xiàn)功能 我總結(jié)了一下主要有一下幾個優(yōu)點:
(1)可插拔的注解支持,包括Feign注解和JAX-RS注解;
(2)支持可插拔的HTTP編碼器和解碼器;
(3)支持Hystrix和它的Fallback;
(4)支持Ribbon的負載均衡;
(5)支持HTTP請求和相應的壓縮。

微服務調(diào)用常用概念
(1)服務降級:
    當服務器壓力劇增的情況下,根據(jù)實際業(yè)務情況及流量,對一些服務和頁面有策略測不處理或換種簡單的方式處理,從而釋放資源以保證核心交易正常運作成高效運作。
(2)斷路:
    熔斷這一概念來自于電子工程中的斷路器(circuit Breaker)。在互聯(lián)網(wǎng)系統(tǒng)中,當下游服務因訪問壓力過大而相應變慢或者失敗,上游為了保護系統(tǒng)整體的可用性,可以暫時切斷對下游服務的調(diào)用。 簡單理解就是降級是針對業(yè)務,斷路是上下游故障。
(3)冪等性:
    就是用戶對于同一操作發(fā)起的一次請求或者多次請求的結(jié)果是一致的,不會因為多次點擊而產(chǎn)生了副作用。

使用方式
下面我們開始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開啟服務發(fā)現(xiàn),注解 @EnableFeignClients支持feign客戶端。

springcloud-feign中怎么實現(xiàn)一個服務發(fā)現(xiàn)功能 用@FeignClient("serviceName")注解在對外的接口上,這樣接口就支持調(diào)用服務,因此支持熱插拔。serviceName使用注冊中心被調(diào)用的服務名字。@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日志配置
springcloud-feign中怎么實現(xiàn)一個服務發(fā)現(xiàn)功能 創(chuàng)建feign日志級別,還有feign的重試機制,這樣feign可以使用重試機制同時把每一次的請求用日志記錄下來。
(2)feign的斷路
springcloud-feign中怎么實現(xiàn)一個服務發(fā)現(xiàn)功能 在feignclient注解中配置fallbackFactory工廠,進行斷路解決。使用factory的好處是可以處理異常信息。還可以使用fallback處理。如果使用fallback,fallbackFactory將不會生效。看一下,F(xiàn)actory springcloud-feign中怎么實現(xiàn)一個服務發(fā)現(xiàn)功能 需要返回一個IProviderService的實現(xiàn)類,在create方法里可以處理異常。這樣在服務端發(fā)生異常或者下線后,將會走斷路方法。
(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
    #切換實例的重試次數(shù)
    ----- provider-service.ribbon.MaxAutoRetriesNextServer = 2

    #對當前實例的重試次數(shù)
    ----- provider-service.ribbon.MaxAutoRetries = 1
    #設置日志級別
    ----- logging.level.com.wotrd.feignservice.service.IProviderService=DEBUG
    斷路的超時時間需要大于讀超時時間,不然重試不生效。

看完上述內(nèi)容,你們對springcloud-feign中怎么實現(xiàn)一個服務發(fā)現(xiàn)功能有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI