国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringCloud Alibaba - HTTP 客戶端 OpenFeign 、自定義配置、優(yōu)化、最佳實踐

這篇具有很好參考價值的文章主要介紹了SpringCloud Alibaba - HTTP 客戶端 OpenFeign 、自定義配置、優(yōu)化、最佳實踐。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、OpenFeign?是什么,有什么用呢?

二、OpenFeign?客戶端的使用

2.1、遠程調用

1.引入依賴

2.在order-service(發(fā)起遠程調用的微服務)的啟動類添加注解開啟Feign的功能

3.編寫 OpenFeign?客戶端

4.通過 OpenFeign?客戶端發(fā)起遠程調用

2.2、自定義 OpenFeign?配置

1.配置文件方式

2.java代碼方式

2.3、Feign 的性能優(yōu)化

1.引入依賴

2.配置連接池

2.4、Feign 的最佳實踐

1.方式一:給消費者的FeignClient和提供者的controller定義統(tǒng)一的父接口作為標準。

2.方式二(推薦):將FeignClient抽取為獨立模塊,并且把接口有關的POJO(實體類)、默認的Feign配置都放到這個模塊中,提供給所有消費者使用


一、OpenFeign?是什么,有什么用呢?


以往我們是通過 RestTemplate 發(fā)起遠程調用,如下

feign客戶端,SpringCloud & Alibaba,spring cloud,http,spring

存在問題如下:

  • 代碼可讀性差,編程體驗不統(tǒng)一
  • 參數(shù)復雜URL難以維護

Feign? 是一個聲明式的 http 客戶端,其作用就是用來把我們解決上述問題的~

二、OpenFeign?客戶端的使用


2.1、遠程調用

主要分為以下步驟:

1.引入依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId> 
</dependency>

注意:由于SpringCloud Feign高版本(例如 2020.1.0)不使用Ribbon而是使用spring-cloud-loadbalancer,所以需要引用spring-cloud-loadbalancer或者降版本

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

2.order-service(發(fā)起遠程調用的微服務)的啟動類添加注解開啟Feign的功能

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring

3.編寫 OpenFeign?客戶端

主要是基于SpringMVC的注解來聲明遠程調用的信息,比如:

  • 服務名稱:userservice
  • 請求方式:GET
  • 請求路徑:/user/{id}
  • 請求參數(shù):Long id
  • 返回值類型:User
import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@Component
@FeignClient("userservice")
public interface UserClients {

    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);

}

如果是高版本的 SpringCloud,那么就需要使用 SpringCloud LoadBalencer 做負載均衡(也比較建議).

具體的添加@LoadBalancerClient注解:在調用服務的Service類上添加@LoadBalancerClient注解,并指定服務名。這樣,負載均衡器將根據(jù)配置的屬性來選擇合適的服務實例進行調用。例如:

如下:

@FeignClient(value = "service-name", configuration = LoadBalancerClientConfiguration.class) 
public interface MyService {  
    @LoadBalanced  //啟用負載均衡
    @GetMapping("/endpoint")  
    String getEndpointData();  
}

4.通過 OpenFeign?客戶端發(fā)起遠程調用

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring

用 Feign 來代替 RestTemplate 是不是十分優(yōu)雅~

2.2、自定義 OpenFeign?配置

2.2.1、超時時間

Ps:OpenFeign早期版本(例如?Hoxton.SR6?)要求服務提供方在1秒內處理業(yè)務邏輯并返回響應。如果超過1秒沒有返回,OpenFeign會直接報錯,不會等待服務執(zhí)行。隨著版本的更新,OpenFeign已經對此做出了調整或優(yōu)化(例如 2021.0.1)。

超時報錯如下:

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring

修改超時時間:

a)在遠程調用方的 application.yml 中配置,指定某個服務提供方的調用超時時間

feign:
  client:
    config:
      product: # 服務名
        connect-timeout: 5000 # 配置指定服務連接超時時間
        read-timeout: 5000 # 配置指定服務等待超時時間

b)在遠程調用方的 application.yml 中配置,指定所有服務提供方的調用超時時間

feign:
  client:
    config:
      default: # 所有服務
        connect-timeout: 5000 # 配置指定服務連接超時時間
        read-timeout: 5000 # 配置指定服務等待超時時間

2.2.2、日志使用

OpenFeign 為了更好的方便在開發(fā)過程中檢測 openfeign 數(shù)據(jù)傳遞 和 響應處理,在設計時提供了日志功能.? 默認 openfeign 日志功能需要手動開啟的.

日志級別有以下 4 種:

  1. NONE:不記錄任何日志.
  2. BASIC:僅僅記錄請求方法、url、響應狀態(tài)代碼及執(zhí)行時間.
  3. HEADERS:記錄 Basic 級別的基礎上,記錄請求和響應的header.
  4. FULL:展示所有 HTTP 協(xié)議狀態(tài).

配置Feign日志有以下兩種方式:

1.配置文件方式(推薦)

a)開啟 openfeign 日志展示

#開啟 openfeign 日志
logging:
  level:
    org: # 這里是 feign 客戶端接口包路徑
      example:
        feign: debug

b)全局生效

feign:
  client:
    config:
      default: # 所有服務生效
        logger-level: FULL

c)局部生效

feign:
  client:
    config: 
      user: # 如果是寫服務名稱,則是針對某個微服務的配置
        logger-level: FULL

d)FULL 級別日志展示如下

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring

2.java代碼方式

首先需要聲明一個 Bean,如下

public class FeignClientConfiguration {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC;  //一般使用 BASIC 級別,因為太多的日志信息影響效率
    }
}

情況一:如果是全局配置,則把它放到@EnableFeignClients這個注解中:

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class) 

情況二:如果是局部配置,則把它放到@FeignClient這個注解中:

@FeignClient(value = "userservice", configuration = FeignClientConfiguration.class) 

2.3、Feign 的性能優(yōu)化

Feign 的底層客戶端實現(xiàn):

  • URLConnection:默認實現(xiàn),不支持連接池
  • Apache HttpClient :支持連接池
  • OKHttp:支持連接池

因此優(yōu)化Feign的性能主要包括:

  1. 使用連接池代替默認的URLConnection
  2. 日志級別,最好用basic或none

因此使用 HttpClient 或 OKHttp 代替 URLConnection

1.引入依賴

<!--httpClient的依賴 -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

2.配置連接池

feign:
  client:
    config:
      default: # default全局的配置
        loggerLevel: BASIC # 日志級別,BASIC就是基本的請求和響應信息 
  httpclient:
    enabled: true # 開啟feign對HttpClient的支持
    max-connections: 200 # 最大的連接數(shù)
    max-connections-per-route: 50 # 每個路徑的最大連接數(shù)

2.4、Feign 的最佳實踐

1.方式一:給消費者的FeignClient和提供者的controller定義統(tǒng)一的父接口作為標準。

仔細觀察我們可以發(fā)現(xiàn), Feign 發(fā)起遠程調用的接口和接收遠程調用請求的 controller 層實現(xiàn)代碼是一樣的,因此,我們我可以把他們的共性提取出來,寫成一個公開的接口,將來我們使用的時候只需要繼承這個接口即可,如下圖

?feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring

?但這種方式存在一定的問題,以下是官方提出的問題:

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring

也就是說

  • 服務緊耦合
  • 不適用于 Spring MVC (父接口參數(shù)列表中的映射不會被繼承

2.方式二(推薦):FeignClient抽取為獨立模塊,并且把接口有關的POJO(實體類)、默認的Feign配置都放到這個模塊中,提供給所有消費者使用

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring

?具體步驟:

1.首先創(chuàng)建一個module,命名為feign-api,然后引入feign的starter依賴

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring

        <!--feign 客戶端依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>


2.將order-service中編寫的UserClient、User、DefaultFeignConfiguration都復制到feign-api項目中

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring


3.在order-service中引入feign-api的依賴

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring

4.修改order-service中的所有與上述三個組件有關的import部分,改成導入feign-api中的包

5.重啟測試

這個時候你重啟項目,項目必然會報以下錯誤

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring

為什么 UserClients 沒有對應的對象呢?

UserClients 之前有對象是因為掃描到?@FeignClient 注解注入了對象?,而現(xiàn)在 order-service 掃描包的范圍是啟動類下的包,但由于我們剛剛把 UserClients 挪到了 feign-api 這個 Module 中,因此,掃描不到該注解,無法注入對象。

總而言之:當定義的FeignClient不在SpringBootApplication的掃描包范圍時,這些FeignClient無法使用。

有以下兩種解決方式:

方式一:指定FeignClient所在包

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")

這種方式會將指定包下的所有東西都拿過來。

方式二(推薦):指定FeignClient字節(jié)碼

@EnableFeignClients(clients = {UserClient.class})

這種方式是精準打擊,只拿指定的類,效率上更推薦使用,用哪個,就指定哪個.

feign客戶端,SpringCloud &amp; Alibaba,spring cloud,http,spring文章來源地址http://www.zghlxwxcb.cn/news/detail-718565.html

到了這里,關于SpringCloud Alibaba - HTTP 客戶端 OpenFeign 、自定義配置、優(yōu)化、最佳實踐的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 微服務——http客戶端Feign

    微服務——http客戶端Feign

    目錄 Restemplate方式調用存在的問題 Feign的介紹 基于Feign遠程調用 Feign自定義配置 修改日志方式一(基于配置文件) 修改日志方式二(基于java代碼) Feign的性能優(yōu)化 連接池使用方法? Feign_最佳實踐分析? ?方式一: 方式二 ?實現(xiàn)Feign最佳實踐(方式二) ?兩種解決方案 就像早期的事務

    2024年02月15日
    瀏覽(44)
  • 【W(wǎng)ebClient】客戶端HTTP 超時配置

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 1、項目升級到Springboot3,使用WebFlux自帶的WebClient作為HTTP客戶端 2、接口類客戶端方式調用外部服務,默認超時5S 3、需根據(jù)業(yè)務動態(tài)修改超時時間,如60S 報錯如下: java.lang.IllegalStateException: Timeout on bl

    2024年02月12日
    瀏覽(34)
  • Http客戶端OkHttp的基本使用

    OkHttp是一個強大的開源HTTP客戶端,它被廣泛用于Android和Java應用程序中。OkHttp具有簡單易用的API,提供了許多高級功能,如連接池、請求壓縮和緩存等。 要使用OkHttp,需要在項目的構建文件中添加以下依賴: 請將 x.x.x 替換為您希望使用的OkHttp版本號。 GET請求 以下是發(fā)送G

    2024年02月09日
    瀏覽(21)
  • 【libevent】http客戶端3:簡單封裝

    LibEventHttp

    2024年02月15日
    瀏覽(19)
  • 【六、http】go的http的客戶端重定向

    【六、http】go的http的客戶端重定向

    重定向過程 :客戶瀏覽器發(fā)送http請求----》web服務器接受后發(fā)送302狀態(tài)碼響應及對應新的location給客戶瀏覽器–》客戶瀏覽器發(fā)現(xiàn)是302響應,則自動再發(fā)送一個新的http請求,請求url是新的location地址----》服務器根據(jù)此請求尋找資源并發(fā)送給客戶。在這里location可以重定向到任

    2024年02月05日
    瀏覽(21)
  • Python 的下一代 HTTP 客戶端

    Python 的下一代 HTTP 客戶端

    迷途小書童 讀完需要 9 分鐘 速讀僅需 3 分鐘 1 環(huán)境 windows 10 64bit python 3.8 httpx 0.23.0 2 簡介 之前我們介紹過使用 requests ( https://xugaoxiang.com/2020/11/28/python-module-requests/ ) 來進行 http 操作,本篇介紹另一個功能非常類似的第三方庫 httpx,它提供了同步和異步的 API,同時支持 HTTP/

    2024年02月12日
    瀏覽(26)
  • Forest聲明式HTTP客戶端框架漫談

    Forest 是一款聲明式的 Java 開源 HTTP 框架,相比它的前輩 Httpclient 和 OkHttp 更簡明易懂、也更容易維護,使用過程中非常絲滑故想分享給更多的朋友,此處我們進行簡單的介紹和使用說明。 Forest為聲明式HTTP客戶端框架。將繁復的 HTTP 請求細節(jié)封裝成 Java 接口 + 注解的形式,不

    2024年02月09日
    瀏覽(24)
  • Java常用的Http client客戶端

    Apache HttpClient是一個開源的Java HTTP客戶端庫,具有豐富的功能集,包括自動重試、連接管理、cookie管理、代理支持和認證等。HttpClient已成為Java開發(fā)中廣泛使用的HTTP客戶端之一。 OkHttp是Square公司開發(fā)的一個高性能的HTTP客戶端庫,具有自動重試、連接池、交互式調試和壓縮支持

    2024年02月08日
    瀏覽(29)
  • 探索高效 Python HTTP 客戶端:HTTPX

    項目地址:https://gitcode.com/encode/httpx 在現(xiàn)代 Web 開發(fā)中,高效的 HTTP 請求庫是不可或缺的一部分。這就是我們要向您介紹的 HTTPX 的地方。HTTPX 是一個高性能、功能豐富的 Python HTTP 客戶端,旨在成為 requests 庫的一個有競爭力的替代品。 HTTPX 提供了全面的異步和同步支持,包括完

    2024年04月14日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包