<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Feign 與 OpenFeign

          共 4912字,需瀏覽 10分鐘

           ·

          2022-08-09 05:58


          1. 什么是Feign

          Netflix Feign 是 Netflix 公司發(fā)布的一種實現(xiàn)負(fù)載均衡和服務(wù)調(diào)用的開源組件。Spring Cloud 將其與 Netflix 中的其他開源服務(wù)組件(例如 Eureka、Ribbon 以及 Hystrix 等)一起整合進 Spring Cloud Netflix 模塊中,整合后全稱為 Spring Cloud Netflix Feign Feign 對 Ribbon (http://c.biancheng.net/springcloud/ribbon.html)進行了集成,利用 Ribbon 維護了一份可用服務(wù)清單,并通過 Ribbon 實現(xiàn)了客戶端的負(fù)載均衡。Feign 是一種聲明式服務(wù)調(diào)用組件,它在 RestTemplate 的基礎(chǔ)上做了進一步的封裝。通過 Feign,我們只需要聲明一個接口并通過注解進行簡單的配置(類似于 Dao 接口上面的 Mapper 注解一樣)即可實現(xiàn)對 HTTP 接口的綁定。通過 Feign,我們可以像調(diào)用本地方法一樣來調(diào)用遠程服務(wù),而完全感覺不到這是在進行遠程調(diào)用。Feign 支持多種注解,例如 Feign 自帶的注解以及 JAX-RS 注解等,但遺憾的是 Feign 本身并不支持 Spring MVC 注解,這無疑會給廣大 Spring 用戶帶來不便。

          2. 什么是openFeign

          2019 年 Netflix 公司宣布 Feign 組件正式進入停更維護狀態(tài),于是 Spring 官方便推出了一個名為 OpenFeign 的組件作為 Feign 的替代方案。

          OpenFeign 全稱 Spring Cloud OpenFeign,它是 Spring 官方推出的一種聲明式服務(wù)調(diào)用與負(fù)載均衡組件,它的出現(xiàn)就是為了替代進入停更維護狀態(tài)的 Feign。OpenFeign 是 Spring Cloud 對 Feign 的二次封裝,它具有 Feign 的所有功能,并在 Feign 的基礎(chǔ)上增加了對 Spring MVC 注解的支持,例如 @RequestMapping、@GetMapping 和 @PostMapping 等。

          常用注解

          注解 說明
          @FeignClient  該注解用于通知 OpenFeign 組件對 @RequestMapping 注解下的接口進行解析,并通過動態(tài)代理的方式產(chǎn)生實現(xiàn)類,實現(xiàn)負(fù)載均衡和服務(wù)調(diào)用。
          @EnableFeignClients 該注解用于開啟 OpenFeign 功能,當(dāng) Spring Cloud 應(yīng)用啟動時,OpenFeign 會掃描標(biāo)有 @FeignClient 注解的接口,生成代理并注冊到 Spring 容器中。
          @RequestMapping Spring MVC 注解,在 Spring MVC 中使用該注解映射請求,通過它來指定控制器(Controller)可以處理哪些 URL 請求,相當(dāng)于 Servlet 中 web.xml 的配置。
          @GetMapping Spring MVC 注解,用來映射 GET 請求,它是一個組合注解,相當(dāng)于 @RequestMapping(method = RequestMethod.GET) 。
          @PostMapping Spring MVC 注解,用來映射 POST 請求,它是一個組合注解,相當(dāng)于 @RequestMapping(method = RequestMethod.POST) 。

          3. Feign與OpenFeign的對比

          相同點

          • Feign 和 OpenFeign 都是 Spring Cloud 下的遠程調(diào)用和負(fù)載均衡組件。

          • Feign 和 OpenFeign 作用一樣,都可以實現(xiàn)服務(wù)的遠程調(diào)用和負(fù)載均衡。

          • Feign 和 OpenFeign 都對 Ribbon 進行了集成,都利用 Ribbon 維護了可用服務(wù)清單,并通過 Ribbon 實現(xiàn)了客戶端的負(fù)載均衡。

          • Feign 和 OpenFeign 都是在服務(wù)消費者(客戶端)定義服務(wù)綁定接口并通過注解的方式進行配置,以實現(xiàn)遠程服務(wù)的調(diào)用。

          不同點

          • Feign 和 OpenFeign 的依賴項不同,F(xiàn)eign 的依賴為 spring-cloud-starter-feign,而 OpenFeign 的依賴為 spring-cloud-starter-openfeign。

          • Feign 和 OpenFeign 支持的注解不同,F(xiàn)eign 支持 Feign 注解和 JAX-RS 注解,但不支持 Spring MVC 注解;OpenFeign 除了支持 Feign 注解和 JAX-RS 注解外,還支持 Spring MVC 注解。

          4. openFeign使用

          引入依賴

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

          <!-- openfeign優(yōu)化請求連接池依賴 -->
          <dependency>
               <groupId>io.github.openfeign</groupId>
               <artifactId>feign-httpclient</artifactId>
          </dependency>

          定義遠程調(diào)用接口

          • 在 @FeignClient 注解中,value 屬性的取值為:服務(wù)提供者的服務(wù)名,即服務(wù)提供者配置文件(application.yml)中 spring.application.name 的取值。

          • 接口中定義的每個方法都與服務(wù)提供者中 Controller 定義的服務(wù)方法對應(yīng)。

          • openfeign本身并不具備fallback降級屬性,需要搭配降級框架如(hystrix或sentinel)。如果未引入降級框架,即使聲明fallback降級服務(wù)類,在遠程調(diào)用發(fā)生異常時,也不會觸發(fā)

          @Component
          @FeignClient(value = "service5")
          public interface FeignService {
             
               @GetMapping("/api/v1/service5")
               List<Integer> get();
             
          }

          啟動類添加注解@EnableFeignClients

          @EnableFeignClients
          @EnableEurekaClient
          @SpringBootApplication
          public class Service3Application {

               public static void main(String[] args) {
                  SpringApplication.run(Service3Application.class, args);
              }

          }

          Controller引入調(diào)用

          @RestController
          @RequestMapping("api/v1/service3")
          public class Controller {

            @Resource
            private FeignService feignService;

            @GetMapping
            public List<Integer> get() {
                return feignService.get();
            }
          }

          5. OpenFeign超時處理

          openFeign 客戶端的默認(rèn)超時時間為 1 秒鐘,如果服務(wù)端處理請求的時間超過 1 秒就會報錯。為了避免這樣的情況,我們需要對 OpenFeign 客戶端的超時時間進行控制。

          yml添加如下進行配置

          ribbon:
            ReadTimeout: 6000 #建立連接所用的時間,適用于網(wǎng)絡(luò)狀況正常的情況下,兩端兩端連接所用的時間
            ConnectionTimeout: 6000 #建立連接后,服[[=務(wù)器讀取到可用資源的時間

          feign:
            client:
               httpclient:
                 enabled: true # 開啟 HttpClient優(yōu)化連接池
            compression:
               request:
                 enabled: true # 開啟請求數(shù)據(jù)的壓縮功能
                 mime-types: text/xml,application/xml, application/json # 壓縮類型
                 min-request-size: 1024 # 最小壓縮值標(biāo)準(zhǔn),當(dāng)數(shù)據(jù)大于 1024 才會進行壓縮
               response:
                 enabled: true # 開啟響應(yīng)數(shù)據(jù)壓縮功能

          6. OpenFeign日志增強

          yml添加日志級別聲明

          logging:
            level:
              com.ftc.service3.FeignService: debug     #feign日志以什么樣的級別監(jiān)控該接口

          說明:

          • com.ftc.service3.FeignService 是開啟 @FeignClient 注解的接口(即服務(wù)綁定接口)的完整類名。也可以只配置部分路徑,表示監(jiān)控該路徑下的所有服務(wù)綁定接口

          • debug:表示監(jiān)聽該接口的日志級別。

          創(chuàng)建日志配置類

          @Configuration
          public class ConfigBean {

            /**
              * OpenFeign 日志增強
              * 配置 OpenFeign 記錄哪些內(nèi)容
              */
            @Bean
            Logger.Level feginLoggerLevel() {
                return Logger.Level.FULL;
            }
          }

          該配置的作用是通過配置的 Logger.Level 對象告訴 OpenFeign 記錄哪些日志內(nèi)容。Logger.Level 的具體級別如下:

          • NONE:不記錄任何信息。

          • BASIC:僅記錄請求方法、URL 以及響應(yīng)狀態(tài)碼和執(zhí)行時間。

          • HEADERS:除了記錄 BASIC 級別的信息外,還會記錄請求和響應(yīng)的頭信息。

          • FULL:記錄所有請求與響應(yīng)的明細,包括頭信息、請求體、元數(shù)據(jù)等等。

          FULL級別如圖:

          source : //www.yuque.com/u27809381/ca4o9w/ocr3v6

          記得點「」和「在看」↓

          愛你們


          瀏覽 33
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美网站在线看 | 日本无码熟妇五十路视频 | 五月丁香婷婷色 | 日韩大香蕉| 久久伊人影院 |