日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

OpenFeign奪命連環(huán)九問

來源: 責(zé)編: 時間:2024-03-18 09:42:50 233觀看
導(dǎo)讀一、前言前面介紹了Spring Cloud 中的靈魂擺渡者Nacos,和它的前輩們相比不僅僅功能強大,而且部署非常簡單。今天介紹一款服務(wù)調(diào)用的組件:OpenFeign,同樣是一款超越先輩(Ribbon、Feign)的狠角色。文章目錄如下:圖片二、Feign

一、前言

前面介紹了Spring Cloud 中的靈魂擺渡者Nacos,和它的前輩們相比不僅僅功能強大,而且部署非常簡單。DfW28資訊網(wǎng)——每日最新資訊28at.com

今天介紹一款服務(wù)調(diào)用的組件:OpenFeign,同樣是一款超越先輩(Ribbon、Feign)的狠角色。DfW28資訊網(wǎng)——每日最新資訊28at.com

文章目錄如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片DfW28資訊網(wǎng)——每日最新資訊28at.com

二、Feign是什么?

Feign也是一個狠角色,F(xiàn)eign旨在使得Java Http客戶端變得更容易。DfW28資訊網(wǎng)——每日最新資訊28at.com

Feign集成了Ribbon、RestTemplate實現(xiàn)了負(fù)載均衡的執(zhí)行Http調(diào)用,只不過對原有的方式(Ribbon+RestTemplate)進(jìn)行了封裝,開發(fā)者不必手動使用RestTemplate調(diào)服務(wù),而是定義一個接口,在這個接口中標(biāo)注一個注解即可完成服務(wù)調(diào)用,這樣更加符合面向接口編程的宗旨,簡化了開發(fā)。DfW28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片DfW28資訊網(wǎng)——每日最新資訊28at.com

但遺憾的是Feign現(xiàn)在停止迭代了,當(dāng)然現(xiàn)在也是有不少企業(yè)在用。DfW28資訊網(wǎng)——每日最新資訊28at.com

有想要學(xué)習(xí)Feign的讀者可以上spring Cloud官網(wǎng)學(xué)習(xí),陳某這里也不再詳細(xì)介紹了,不是今天的重點。DfW28資訊網(wǎng)——每日最新資訊28at.com

三、openFeign是什么?

前面介紹過停止迭代的Feign,簡單點來說:OpenFeign是springcloud在Feign的基礎(chǔ)上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通過動態(tài)代理的方式產(chǎn)生實現(xiàn)類,實現(xiàn)類中做負(fù)載均衡并調(diào)用其他服務(wù)。DfW28資訊網(wǎng)——每日最新資訊28at.com

官網(wǎng)地址:https://docs.spring.io/spring-cloud-openfeign/docs/2.2.10.BUILD-SNAPSHOT/reference/htmlDfW28資訊網(wǎng)——每日最新資訊28at.com

四、Feign和openFeign有什么區(qū)別?

FeignDfW28資訊網(wǎng)——每日最新資訊28at.com

openFiegnDfW28資訊網(wǎng)——每日最新資訊28at.com

Feign是SpringCloud組件中一個輕量級RESTful的HTTP服務(wù)客戶端,F(xiàn)eign內(nèi)置了Ribbon,用來做客戶端負(fù)載均衡,去調(diào)用服務(wù)注冊中心的服務(wù)。Feign的使用方式是:使用Feign的注解定義接口,調(diào)用這個接口,就可以調(diào)用服務(wù)注冊中心的服務(wù)DfW28資訊網(wǎng)——每日最新資訊28at.com

OpenFeign 是SpringCloud在Feign的基礎(chǔ)上支持了SpringMVC的注解,如@RequestMapping等。OpenFeign 的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通過動態(tài)代理的方式產(chǎn)生實現(xiàn)類,實現(xiàn)類中做負(fù)載均衡并調(diào)用其他服務(wù)。DfW28資訊網(wǎng)——每日最新資訊28at.com

五、環(huán)境準(zhǔn)備

本篇文章Spring Cloud版本、JDK環(huán)境、項目環(huán)境均和上一篇Nacos的環(huán)境相同:五十五張圖告訴你微服務(wù)的靈魂擺渡者Nacos究竟有多強?。DfW28資訊網(wǎng)——每日最新資訊28at.com

注冊中心就不再使用Eureka了,直接使用Nacos作為注冊和配置中心,有不會的可以查看Nacos文章。DfW28資訊網(wǎng)——每日最新資訊28at.com

本篇文章搭建的項目結(jié)構(gòu)如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片DfW28資訊網(wǎng)——每日最新資訊28at.com

注冊中心使用Nacos,創(chuàng)建個微服務(wù),分別為服務(wù)提供者Produce,服務(wù)消費者Consumer。DfW28資訊網(wǎng)——每日最新資訊28at.com

六、創(chuàng)建服務(wù)提供者

既然是微服務(wù)之間的相互調(diào)用,那么一定會有服務(wù)提供者了,創(chuàng)建openFeign-provider9005,注冊進(jìn)入Nacos中,配置如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

server:  port: 9005spring:  application:    ## 指定服務(wù)名稱,在nacos中的名字    name: openFeign-provider  cloud:    nacos:      discovery:        # nacos的服務(wù)地址,nacos-server中IP地址:端口號        server-addr: 127.0.0.1:8848management:  endpoints:    web:      exposure:        ## yml文件中存在特殊字符,必須用單引號包含,否則啟動報錯        include: '*'

注意:此處的spring.application.name指定的名稱將會在openFeign接口調(diào)用中使用。DfW28資訊網(wǎng)——每日最新資訊28at.com

項目源碼都會上傳,關(guān)于如何注冊進(jìn)入Nacos,添加什么依賴源碼都會有,結(jié)合陳某上篇Nacos文章,這都不是難事!DfW28資訊網(wǎng)——每日最新資訊28at.com

七、創(chuàng)建服務(wù)消費者

新建一個模塊openFeign-consumer9006作為消費者服務(wù),步驟如下。DfW28資訊網(wǎng)——每日最新資訊28at.com

1.添加依賴

除了Nacos的注冊中心的依賴,還要添加openFeign的依賴,如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

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

2.添加注解@EnableFeignClients開啟openFeign功能

老套路了,在Spring boot 主啟動類上添加一個注解@EnableFeignClients,開啟openFeign功能,如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class OpenFeignConsumer9006Application{    public static void main(String[] args) {        SpringApplication.run(OpenFeignConsumer9006Application.class, args);    }}

3.新建openFeign接口

新建一個openFeign接口,使用@FeignClient注解標(biāo)注,如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@FeignClient(value = "openFeign-provider")public interface OpenFeignService {}

注意:該注解@FeignClient中的value屬性指定了服務(wù)提供者在nacos注冊中心的服務(wù)名。DfW28資訊網(wǎng)——每日最新資訊28at.com

4.新建一個Controller調(diào)試

新建一個controller用來調(diào)試接口,直接調(diào)用openFeign的接口,如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/openfeign")public class OpenFeignController {    }

好了,至此一個openFeign的微服務(wù)就搭建好了,并未實現(xiàn)具體的功能,下面一點點實現(xiàn)。DfW28資訊網(wǎng)——每日最新資訊28at.com

八、openFeign如何傳參?

開發(fā)中接口傳參的方式有很多,但是在openFeign中的傳參是有一定規(guī)則的,下面詳細(xì)介紹。DfW28資訊網(wǎng)——每日最新資訊28at.com

1.傳遞JSON數(shù)據(jù)

這個也是接口開發(fā)中常用的傳參規(guī)則,在Spring Boot 中通過@RequestBody標(biāo)識入?yún)ⅰ?span style="display:none">DfW28資訊網(wǎng)——每日最新資訊28at.com

provider接口中JSON傳參方法如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/openfeign/provider")public class OpenFeignProviderController {    @PostMapping("/order2")    public Order createOrder2(@RequestBody Order order){        return order;    }}

consumer中openFeign接口中傳參代碼如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@FeignClient(value = "openFeign-provider")public interface OpenFeignService {    /**     * 參數(shù)默認(rèn)是@RequestBody標(biāo)注的,這里的@RequestBody可以不填     * 方法名稱任意     */    @PostMapping("/openfeign/provider/order2")    Order createOrder2(@RequestBody Order order);}

注意:openFeign默認(rèn)的傳參方式就是JSON傳參(@RequestBody),因此定義接口的時候可以不用@RequestBody注解標(biāo)注,不過為了規(guī)范,一般都填上。DfW28資訊網(wǎng)——每日最新資訊28at.com

2.POJO表單傳參

這種傳參方式也是比較常用,參數(shù)使用POJO對象接收。DfW28資訊網(wǎng)——每日最新資訊28at.com

provider服務(wù)提供者代碼如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/openfeign/provider")public class OpenFeignProviderController {    @PostMapping("/order1")    public Order createOrder1(Order order){        return order;    }}

consumer消費者openFeign代碼如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@FeignClient(value = "openFeign-provider")public interface OpenFeignService {    /**     * 參數(shù)默認(rèn)是@RequestBody標(biāo)注的,如果通過POJO表單傳參的,使用@SpringQueryMap標(biāo)注     */    @PostMapping("/openfeign/provider/order1")    Order createOrder1(@SpringQueryMap Order order);}

網(wǎng)上很多人疑惑POJO表單方式如何傳參,官方文檔明確給出了解決方案,如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片DfW28資訊網(wǎng)——每日最新資訊28at.com

openFeign提供了一個注解@SpringQueryMap完美解決POJO表單傳參。DfW28資訊網(wǎng)——每日最新資訊28at.com

3.URL中攜帶參數(shù)

此種方式針對restful方式中的GET請求,也是比較常用請求方式。DfW28資訊網(wǎng)——每日最新資訊28at.com

provider服務(wù)提供者代碼如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/openfeign/provider")public class OpenFeignProviderController {    @GetMapping("/test/{id}")    public String test(@PathVariable("id")Integer id){        return "accept one msg id="+id;}

consumer消費者openFeign接口如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@FeignClient(value = "openFeign-provider")public interface OpenFeignService {    @GetMapping("/openfeign/provider/test/{id}")    String get(@PathVariable("id")Integer id);}

使用注解@PathVariable接收url中的占位符,這種方式很好理解。DfW28資訊網(wǎng)——每日最新資訊28at.com

4.普通表單參數(shù)

此種方式傳參不建議使用,但是也有很多開發(fā)在用。DfW28資訊網(wǎng)——每日最新資訊28at.com

provider服務(wù)提供者代碼如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/openfeign/provider")public class OpenFeignProviderController {    @PostMapping("/test2")    public String test2(String id,String name){        return MessageFormat.format("accept on msg id={0},name={1}",id,name);    }}

consumer消費者openFeign接口傳參如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@FeignClient(value = "openFeign-provider")public interface OpenFeignService {    /**     * 必須要@RequestParam注解標(biāo)注,且value屬性必須填上參數(shù)名     * 方法參數(shù)名可以任意,但是@RequestParam注解中的value屬性必須和provider中的參數(shù)名相同     */    @PostMapping("/openfeign/provider/test2")    String test(@RequestParam("id") String arg1,@RequestParam("name") String arg2);}

5.總結(jié)

傳參的方式有很多,比如文件傳參.....陳某這里只是列舉了四種常見得傳參方式。DfW28資訊網(wǎng)——每日最新資訊28at.com

九、超時如何處理?

想要理解超時處理,先看一個例子:我將provider服務(wù)接口睡眠3秒鐘,接口如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@PostMapping("/test2")public String test2(String id,String name) throws InterruptedException {        Thread.sleep(3000);        return MessageFormat.format("accept on msg id={0},name={1}",id,name);}

此時,我們調(diào)用consumer的openFeign接口返回結(jié)果如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片DfW28資訊網(wǎng)——每日最新資訊28at.com

很明顯的看出程序異常了,返回了接口調(diào)用超時。what?why?...........DfW28資訊網(wǎng)——每日最新資訊28at.com

openFeign其實是有默認(rèn)的超時時間的,默認(rèn)分別是連接超時時間10秒、讀超時時間60秒,源碼在feign.Request.Options#Options()這個方法中,如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片DfW28資訊網(wǎng)——每日最新資訊28at.com

那么問題來了:為什么我只設(shè)置了睡眠3秒就報超時呢?DfW28資訊網(wǎng)——每日最新資訊28at.com

其實openFeign集成了Ribbon,Ribbon的默認(rèn)超時連接時間、讀超時時間都是是1秒,源碼在org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer#execute()方法中,如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片DfW28資訊網(wǎng)——每日最新資訊28at.com

源碼大致意思:如果openFeign沒有設(shè)置對應(yīng)得超時時間,那么將會采用Ribbon的默認(rèn)超時時間。DfW28資訊網(wǎng)——每日最新資訊28at.com

理解了超時設(shè)置的原理,由之產(chǎn)生兩種方案也是很明了了,如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

  • 設(shè)置openFeign的超時時間
  • 設(shè)置Ribbon的超時時間

1.設(shè)置Ribbon的超時時間(不推薦)

設(shè)置很簡單,在配置文件中添加如下設(shè)置:DfW28資訊網(wǎng)——每日最新資訊28at.com

ribbon:  # 值的是建立鏈接所用的時間,適用于網(wǎng)絡(luò)狀況正常的情況下, 兩端鏈接所用的時間  ReadTimeout: 5000  # 指的是建立鏈接后從服務(wù)器讀取可用資源所用的時間  ConectTimeout: 5000

2.設(shè)置openFeign的超時時間(推薦)

openFeign設(shè)置超時時間非常簡單,只需要在配置文件中配置,如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

feign:  client:    config:      ## default 設(shè)置的全局超時時間,指定服務(wù)名稱可以設(shè)置單個服務(wù)的超時時間      default:        connectTimeout: 5000        readTimeout: 5000

default設(shè)置的是全局超時時間,對所有的openFeign接口服務(wù)都生效DfW28資訊網(wǎng)——每日最新資訊28at.com

但是正常的業(yè)務(wù)邏輯中可能涉及到多個openFeign接口的調(diào)用,如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片DfW28資訊網(wǎng)——每日最新資訊28at.com

上圖中的偽代碼如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

public T invoke(){    //1. 調(diào)用serviceA    serviceA();        //2. 調(diào)用serviceA    serviceB();        //3. 調(diào)用serviceA    serviceC();}

那么上面配置的全局超時時間能不能通過呢?很顯然是serviceA、serviceB能夠成功調(diào)用,但是serviceC并不能成功執(zhí)行,肯定報超時。DfW28資訊網(wǎng)——每日最新資訊28at.com

此時我們可以給serviceC這個服務(wù)單獨配置一個超時時間,配置如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

feign:  client:    config:      ## default 設(shè)置的全局超時時間,指定服務(wù)名稱可以設(shè)置單個服務(wù)的超時時間      default:        connectTimeout: 5000        readTimeout: 5000      ## 為serviceC這個服務(wù)單獨配置超時時間      serviceC:        connectTimeout: 30000        readTimeout: 30000

注意:單個配置的超時時間將會覆蓋全局配置。DfW28資訊網(wǎng)——每日最新資訊28at.com

十、如何開啟日志增強?

openFeign雖然提供了日志增強功能,但是默認(rèn)是不顯示任何日志的,不過開發(fā)者在調(diào)試階段可以自己配置日志的級別。DfW28資訊網(wǎng)——每日最新資訊28at.com

openFeign的日志級別如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

  • NONE:默認(rèn)的,不顯示任何日志;
  • BASIC:僅記錄請求方法、URL、響應(yīng)狀態(tài)碼及執(zhí)行時間;
  • HEADERS:除了BASIC中定義的信息之外,還有請求和響應(yīng)的頭信息;
  • FULL:除了HEADERS中定義的信息之外,還有請求和響應(yīng)的正文及元數(shù)據(jù)。

配置起來也很簡單,步驟如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

1.配置類中配置日志級別

需要自定義一個配置類,在其中設(shè)置日志級別,如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

注意:這里的logger是feign包里的。DfW28資訊網(wǎng)——每日最新資訊28at.com

2.yaml文件中設(shè)置接口日志級別

只需要在配置文件中調(diào)整指定包或者openFeign的接口日志級別,如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

logging:  level:    cn.myjszl.service: debug

這里的cn.myjszl.service是openFeign接口所在的包名,當(dāng)然你也可以配置一個特定的openFeign接口。DfW28資訊網(wǎng)——每日最新資訊28at.com

3.演示效果

上述步驟將日志設(shè)置成了FULL,此時發(fā)出請求,日志效果如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

日志中詳細(xì)的打印出了請求頭、請求體的內(nèi)容。DfW28資訊網(wǎng)——每日最新資訊28at.com

十一、如何替換默認(rèn)的httpclient?

Feign在默認(rèn)情況下使用的是JDK原生的URLConnection發(fā)送HTTP請求,沒有連接池,但是對每個地址會保持一個長連接,即利用HTTP的persistence connection。DfW28資訊網(wǎng)——每日最新資訊28at.com

在生產(chǎn)環(huán)境中,通常不使用默認(rèn)的http client,通常有如下兩種選擇:DfW28資訊網(wǎng)——每日最新資訊28at.com

  • 使用ApacheHttpClient
  • 使用OkHttp

至于哪個更好,其實各有千秋,我比較傾向于ApacheHttpClient,畢竟老牌子了,穩(wěn)定性不在話下。DfW28資訊網(wǎng)——每日最新資訊28at.com

那么如何替換掉呢?其實很簡單,下面演示使用ApacheHttpClient替換。DfW28資訊網(wǎng)——每日最新資訊28at.com

1.添加ApacheHttpClient依賴

在openFeign接口服務(wù)的pom文件添加如下依賴:DfW28資訊網(wǎng)——每日最新資訊28at.com

<!--     使用Apache HttpClient替換Feign原生httpclient-->    <dependency>      <groupId>org.apache.httpcomponents</groupId>      <artifactId>httpclient</artifactId>    </dependency>        <dependency>      <groupId>io.github.openfeign</groupId>      <artifactId>feign-httpclient</artifactId>    </dependency>

為什么要添加上面的依賴呢?從源碼中不難看出,請看org.springframework.cloud.openfeign.FeignAutoConfiguration.HttpClientFeignConfiguration這個類,代碼如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

上述紅色框中的生成條件,其中的@ConditionalOnClass(ApacheHttpClient.class),必須要有ApacheHttpClient這個類才會生效,并且feign.httpclient.enabled這個配置要設(shè)置為true。DfW28資訊網(wǎng)——每日最新資訊28at.com

2.配置文件中開啟

在配置文件中要配置開啟,代碼如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

feign:  client:    httpclient:      # 開啟 Http Client      enabled: true

3.如何驗證已經(jīng)替換成功?

其實很簡單,在feign.SynchronousMethodHandler#executeAndDecode()這個方法中可以清楚的看出調(diào)用哪個client,如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

上圖中可以看到最終調(diào)用的是ApacheHttpClient。DfW28資訊網(wǎng)——每日最新資訊28at.com

4.總結(jié)

上述步驟僅僅演示一種替換方案,剩下的一種不再演示了,原理相同。DfW28資訊網(wǎng)——每日最新資訊28at.com

十二、如何通訊優(yōu)化?

在講如何優(yōu)化之前先來看一下GZIP 壓縮算法,概念如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

gzip是一種數(shù)據(jù)格式,采用用deflate算法壓縮數(shù)據(jù);gzip是一種流行的數(shù)據(jù)壓縮算法,應(yīng)用十分廣泛,尤其是在Linux平臺。DfW28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)GZIP壓縮到一個純文本數(shù)據(jù)時,效果是非常明顯的,大約可以減少70%以上的數(shù)據(jù)大小。DfW28資訊網(wǎng)——每日最新資訊28at.com

網(wǎng)絡(luò)數(shù)據(jù)經(jīng)過壓縮后實際上降低了網(wǎng)絡(luò)傳輸?shù)淖止?jié)數(shù),最明顯的好處就是可以加快網(wǎng)頁加載的速度。網(wǎng)頁加載速度加快的好處不言而喻,除了節(jié)省流量,改善用戶的瀏覽體驗外,另一個潛在的好處是GZIP與搜索引擎的抓取工具有著更好的關(guān)系。例如 Google就可以通過直接讀取GZIP文件來比普通手工抓取更快地檢索網(wǎng)頁。DfW28資訊網(wǎng)——每日最新資訊28at.com

GZIP壓縮傳輸?shù)脑砣缦聢D:DfW28資訊網(wǎng)——每日最新資訊28at.com

按照上圖拆解出的步驟如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

  • 客戶端向服務(wù)器請求頭中帶有:Accept-Encoding:gzip,deflate 字段,向服務(wù)器表示,客戶端支持的壓縮格式(gzip或者deflate),如果不發(fā)送該消息頭,服務(wù)器是不會壓縮的。
  • 服務(wù)端在收到請求之后,如果發(fā)現(xiàn)請求頭中含有Accept-Encoding字段,并且支持該類型的壓縮,就對響應(yīng)報文壓縮之后返回給客戶端,并且攜帶Content-Encoding:gzip消息頭,表示響應(yīng)報文是根據(jù)該格式壓縮過的。
  • 客戶端接收到響應(yīng)之后,先判斷是否有Content-Encoding消息頭,如果有,按該格式解壓報文。否則按正常報文處理。

openFeign支持請求/響應(yīng)開啟GZIP壓縮,整體的流程如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

上圖中涉及到GZIP傳輸?shù)闹挥袃蓧K,分別是Application client -> Application Service、 Application Service->Application client。DfW28資訊網(wǎng)——每日最新資訊28at.com

注意:openFeign支持的GZIP僅僅是在openFeign接口的請求和響應(yīng),即是openFeign消費者調(diào)用服務(wù)提供者的接口。DfW28資訊網(wǎng)——每日最新資訊28at.com

openFeign開啟GZIP步驟也是很簡單,只需要在配置文件中開啟如下配置:DfW28資訊網(wǎng)——每日最新資訊28at.com

feign:  ## 開啟壓縮  compression:    request:      enabled: true      ## 開啟壓縮的閾值,單位字節(jié),默認(rèn)2048,即是2k,這里為了演示效果設(shè)置成10字節(jié)      min-request-size: 10      mime-types: text/xml,application/xml,application/json    response:      enabled: true

上述配置完成之后,發(fā)出請求,可以清楚看到請求頭中已經(jīng)攜帶了GZIP壓縮,如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

十三、如何熔斷降級?

常見的熔斷降級框架有Hystrix、Sentinel,openFeign默認(rèn)支持的就是Hystrix,這個在官方文檔上就有體現(xiàn),畢竟是一奶同胞嘛,哈哈...........DfW28資訊網(wǎng)——每日最新資訊28at.com

但是阿里的Sentinel無論是功能特性、簡單易上手等各方面都完全秒殺Hystrix,因此此章節(jié)就使用openFeign+Sentinel進(jìn)行整合實現(xiàn)服務(wù)降級。DfW28資訊網(wǎng)——每日最新資訊28at.com

說明:此處并不著重介紹Sentinel,陳某打算放在下一篇文章詳細(xì)介紹Sentinel的強大之處。DfW28資訊網(wǎng)——每日最新資訊28at.com

1.添加Sentinel依賴

在openFeign-consumer9006消費者的pom文件添加sentinel依賴(由于使用了聚合模塊,不指定版本號),如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

<dependency>      <groupId>com.alibaba.cloud</groupId>      <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>

2.配置文件中開啟sentinel熔斷降級

要想openFeign使用sentinel的降級功能,還需要在配置文件中開啟,添加如下配置:DfW28資訊網(wǎng)——每日最新資訊28at.com

feign:  sentinel:    enabled: true

3.添加降級回調(diào)類

這個類一定要和openFeign接口實現(xiàn)同一個類,如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

OpenFeignFallbackService這個是降級回調(diào)的類,一旦OpenFeignService中對應(yīng)得接口出現(xiàn)了異常則會調(diào)用這個類中對應(yīng)得方法進(jìn)行降級處理。DfW28資訊網(wǎng)——每日最新資訊28at.com

4.添加fallback屬性

在@FeignClient中添加fallback屬性,屬性值是降級回調(diào)的類,如下:DfW28資訊網(wǎng)——每日最新資訊28at.com

@FeignClient(value = "openFeign-provider",fallback = OpenFeignFallbackService.class)public interface OpenFeignService {}

5.演示

經(jīng)過如上4個步驟,openFeign的熔斷降級已經(jīng)設(shè)置完成了,此時演示下效果。DfW28資訊網(wǎng)——每日最新資訊28at.com

通過postman調(diào)用http://localhost:9006/openfeign/order3這個接口,正常邏輯返回如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在手動造個異常,在服務(wù)提供的接口中拋出異常,如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

此時重新調(diào)用http://localhost:9006/openfeign/order3,返回如下圖:DfW28資訊網(wǎng)——每日最新資訊28at.com

哦豁,可以很清楚的看到服務(wù)已經(jīng)成功降級調(diào)用,哦了,功能完成。DfW28資訊網(wǎng)——每日最新資訊28at.com

注意:實際開發(fā)中返回結(jié)果應(yīng)該根據(jù)架構(gòu)統(tǒng)一定制,陳某這里只是為了演示方便,不要借鑒,哈哈。。。DfW28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-76562-0.htmlOpenFeign奪命連環(huán)九問

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Spring事件如何異步執(zhí)行?

下一篇: 開始C++的第一個程序:hello world

標(biāo)簽:
  • 熱門焦點
  • Find N3入網(wǎng):最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經(jīng)正式入網(wǎng),型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經(jīng)過去,最明顯的肯定就是大內(nèi)存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • 消息稱迪士尼要拍真人版《魔發(fā)奇緣》:女主可能也找黑人演員

    8月5日消息,迪士尼確實有點忙,忙著將不少動畫改成真人版,繼《美人魚》后,真人版《白雪公主》、《魔發(fā)奇緣》也在路上了。據(jù)外媒消息稱,迪士尼將打造真人版
  • 把LangChain跑起來的三個方法

    使用LangChain開發(fā)LLM應(yīng)用時,需要機器進(jìn)行GLM部署,好多同學(xué)第一步就被勸退了,那么如何繞過這個步驟先學(xué)習(xí)LLM模型的應(yīng)用,對Langchain進(jìn)行快速上手?本片講解3個把LangChain跑起來
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新業(yè)務(wù)到 2022 年底還是 0,希望 2023 年出來一個 1。&rdquo;這是2022年底,李彥宏
  • OPPO K11評測:旗艦級IMX890加持 2000元檔最強影像手機

    【Techweb評測】中端機型用戶群體巨大,占了中國目前手機市場的大頭,一直以來都是各手機品牌的“必爭之地”,其中OPPO K系列機型一直以來都以高品質(zhì)、
  • SN570 NVMe SSD固態(tài)硬盤 價格與性能兼具

    SN570 NVMe SSD固態(tài)硬盤是西部數(shù)據(jù)發(fā)布的最新一代WD Blue系列的固態(tài)硬盤,不僅閃存技術(shù)更為精進(jìn),性能也得到了進(jìn)一步的躍升。WD Blue SN570 NVMe SSD的包裝外
  • 世界人工智能大會國際日開幕式活動在世博展覽館開啟

    30日上午,世界人工智能大會國際日開幕式活動在世博展覽館開啟,聚集國際城市代表、重量級院士專家、國際創(chuàng)新企業(yè)代表,共同打造人工智能交流平臺。上海市副市
  • 榮耀Magic4 至臻版 首創(chuàng)智慧隱私通話 強勁影音系統(tǒng)

    2022年第一季度臨近尾聲,在該季度內(nèi),許多品牌陸續(xù)發(fā)布自己的最新產(chǎn)品,讓大家從全新的角度來了解當(dāng)今的手機技術(shù)。手機是電子設(shè)備中,更新迭代十分迅速的一款產(chǎn)品,基
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久久久久久网| 亚洲免费人成在线视频观看| 激情欧美国产欧美| 亚洲国产欧美日韩| 一区二区激情视频| 欧美一区二区观看视频| 久久精品欧洲| 欧美丰满少妇xxxbbb| 国产精品国产馆在线真实露脸| 国产视频一区欧美| 亚洲电影免费观看高清完整版在线观看| 亚洲精品一区二区网址 | 亚洲免费大片| 欧美亚洲一区在线| 奶水喷射视频一区| 国产精品毛片a∨一区二区三区| 国内精品视频久久| 夜夜爽99久久国产综合精品女不卡 | 国产精品99久久久久久白浆小说| 欧美在线999| 欧美精品在线播放| 国产一区二区精品| 一本一道久久综合狠狠老精东影业 | 久久久天天操| 欧美午夜片在线观看| 在线观看视频一区| 亚洲专区在线视频| 免费观看亚洲视频大全| 国产伦精品一区二区三区高清版| 91久久综合亚洲鲁鲁五月天| 性久久久久久| 欧美日韩视频在线一区二区 | 亚洲精品在线三区| 久久久五月婷婷| 欧美性淫爽ww久久久久无| 一区二区在线观看视频| 亚洲专区一区| 欧美裸体一区二区三区| 伊人久久婷婷色综合98网| 亚洲欧美日韩精品久久奇米色影视| 欧美成人黑人xx视频免费观看| 国产日韩欧美视频| 亚洲午夜视频在线| 欧美成人一区二区在线| 国语自产精品视频在线看抢先版结局| 中文在线不卡视频| 欧美高清在线播放| 怡红院精品视频| 欧美资源在线| 国产精品欧美一区二区三区奶水| 亚洲人成精品久久久久| 麻豆成人av| 国产亚洲一区二区精品| 亚洲欧美日产图| 欧美视频一区二区三区在线观看| 亚洲欧洲日本在线| 久久亚洲精品一区二区| 国产综合一区二区| 欧美在线一二三| 国产精品美女午夜av| 99精品欧美一区二区蜜桃免费| 免费观看欧美在线视频的网站| 国产在线精品一区二区夜色| 亚洲欧美精品伊人久久| 欧美午夜精品一区| 99在线视频精品| 欧美日本亚洲| 99精品欧美一区二区三区综合在线| 狼人天天伊人久久| 在线播放不卡| 久久综合狠狠综合久久激情| 黄网站免费久久| 久久久久久综合网天天| 精品不卡一区| 久色成人在线| 亚洲电影观看| 欧美激情欧美激情在线五月| 最新精品在线| 欧美精品在线观看91| 亚洲乱亚洲高清| 欧美欧美全黄| 99精品热6080yy久久| 欧美日韩国产天堂| 一区二区欧美激情| 国产精品国产三级国产aⅴ入口| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美在线免费视频| 国产一区二区高清| 久久蜜桃精品| 亚洲国产精品免费| 欧美伦理在线观看| 亚洲影院在线观看| 国产农村妇女毛片精品久久麻豆 | 午夜精品国产精品大乳美女| 国产欧美精品日韩精品| 久久精品日韩一区二区三区| 在线观看视频一区二区| 欧美成人激情视频免费观看| 日韩一二三区视频| 国产精品午夜久久| 久久免费高清| 亚洲精品婷婷| 国产精品久久久一区二区| 性久久久久久久| 伊人久久大香线蕉综合热线| 欧美精品大片| 亚洲网友自拍| 国模吧视频一区| 欧美承认网站| 亚洲尤物视频网| 黄色成人av网站| 欧美精选一区| 午夜免费电影一区在线观看| 国内在线观看一区二区三区| 欧美国产激情| 亚洲制服欧美中文字幕中文字幕| 国产主播一区二区三区| 欧美激情国产日韩| 亚洲女与黑人做爰| 在线观看一区欧美| 欧美日韩一级大片网址| 欧美在线中文字幕| 亚洲人成人一区二区三区| 国产精品你懂的在线欣赏| 久久一区激情| 亚洲一区二区三区免费视频| 合欧美一区二区三区| 欧美日韩精品免费观看视频完整| 欧美在线在线| 日韩视频免费在线观看| 国产午夜精品美女视频明星a级| 欧美高清hd18日本| 欧美在线电影| 日韩视频在线永久播放| 国产一区二区三区精品久久久| 欧美国产激情二区三区| 性色av一区二区三区在线观看 | 久久精品一区二区| 99在线|亚洲一区二区| 国内精品视频久久| 欧美日韩中文字幕在线| 久久综合导航| 性久久久久久久久久久久| 亚洲精品国产精品久久清纯直播| 国产欧美日韩另类一区| 欧美精彩视频一区二区三区| 欧美在线亚洲一区| 亚洲视频大全| 亚洲欧洲精品一区二区三区| 国产一区二区久久精品| 欧美午夜不卡影院在线观看完整版免费 | 久久久精品日韩| 在线视频欧美日韩精品| 亚洲福利视频二区| 国产欧美精品| 国产精品www色诱视频| 欧美风情在线| 久久亚洲二区| 欧美在线www| 亚洲婷婷在线| 99国产精品视频免费观看| 伊人久久久大香线蕉综合直播| 国产毛片精品视频| 欧美视频不卡中文| 欧美女同视频| 你懂的视频欧美| 久久久7777| 午夜视频在线观看一区二区| 一区二区三区黄色| 最新成人在线| 亚洲国产成人porn| 黄色亚洲免费| 国产一区二区主播在线| 国产精品一区二区久久精品| 欧美日韩高清不卡| 欧美sm重口味系列视频在线观看| 久久久国产91| 久久精品二区亚洲w码| 午夜久久黄色| 亚洲欧美色一区| 亚洲香蕉在线观看| 一区二区三区日韩欧美精品| 亚洲免费电影在线观看| 亚洲乱码国产乱码精品精| 亚洲国产精品一区二区www| 精品999成人| 精品1区2区| 在线观看日韩专区| 影音先锋日韩精品| 亚洲第一福利视频| 经典三级久久| 极品日韩久久| 伊人久久久大香线蕉综合直播| 国产自产高清不卡| 国内精品福利| 激情视频亚洲| 精品福利电影| 一区在线观看| 亚洲国产精品悠悠久久琪琪| 亚洲国产欧美一区二区三区久久 | 国产精品播放| 国产精品久久久久久影视| 国产精品对白刺激久久久| 国产精品国产三级国产aⅴ9色|