<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      shuijibaobao

      導航

       

      當我們通過RestTemplate調用其它服務的API時,所需要的參數須在請求的URL中進行拼接,如果參數少的話或許我們還可以忍受,一旦有多個參數的話,這時拼接請求字符串就會效率低下。

      1. Feign概述

      Feign是Spring Cloud提供的聲明式、模板化的HTTP客戶端, 它使得調用遠程服務就像調用本地服務一樣簡單,只需要創建一個接口并添加一個注解即可。

      Spring Cloud集成Feign并對其進行了增強,使Feign支持了Spring MVC注解;Feign默認集成了Ribbon,所以Fegin默認就實現了負載均衡的效果。

      2. Feign基本使用

      以下所有步驟實現的前提是需要在啟動類上加入注解 @EnableFeignClients 主要是為開啟feign接口掃描

      2.1 創建服務提供者(provider)

      <!--Spring Cloud OpenFeign Starter -->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
      </dependency>
      

      在服務提供者中調用servic層獲取數據

      //創建服務提供者
      @RestController
      @RequestMapping("/provider")
      public class ProviderController {
      	
      	@Autowired
      	private UserService userService;
       
      	@RequestMapping("/getUserById/{id}")
      	public User getUserById(@PathVariable Integer id){
      		return userService.getUserById(id);
      	}
      }
      

      2.2 創建feign接口

      /**
       * @FeignClient 一般采用服務名進行命名
       * name:指定FeignClient的名稱,如果項目使用了Ribbon,name屬性會作為微服務的名稱,用于服務發現
       * url: url一般用于調試,可以手動指定@FeignClient調用的地址
       *
       * @RequestMapping 主要用于feign框架拼接傳遞url,彌補了Ribbon的url需要手動拼接的缺陷
       * @PathVariable("id") 當路徑為restful風格時路徑傳參方式
       * @RequestParam("id") 當路徑為?id=250 時傳參方式
       * @RequestBody User user 當路徑為對象時采用的傳參方式,(集合、數組等都屬于對象)
       */
      @FeignClient("feign-provider")
      @RequestMapping("/provider")
      public interface UserFeign {
       
          @RequestMapping("/getUserById/{id}")
          User getUserById(@PathVariable("id") Integer id);
       
          @RequestMapping("/deleteUserById")
          User deleteUserById(@RequestParam("id") Integer id);//?形式拼接參數,?id=250
       
          @RequestMapping("/addUser")
          User addUser(@RequestBody User user);//pojo--->json
      }
      

      2.3 創建服務消費者(consumer)

      //服務消費者
      @RestController
      @RequestMapping("/consumer")
      public class ConsumerController {
       
          @Autowired
          private UserFeign userFeign;
       
          @RequestMapping("/getUserById/{id}")
          public User getUserById(@PathVariable Integer id){
              return userFeign.getUserById(id);
          }
      }
      

      application.yml文件

      server:
        port: 80
      spring:
        cloud:
          nacos:
            discovery:
              server-addr: 192.168.209.129:8848
        application:
          name: feign-consumer
      
      

      3. Feign 原理

      1、將feign接口的代理類掃描到Spring容器中:
      @EnableFeignClients開啟feign注解掃描:FeignClientsRegistrar.registerFeignClients()掃描被 @FeignClient標識的接口生成代理類,并把接口和代理類交給Spring的容器管理。
      2、為接口的方法創建RequestTemplate
      當consumer調用feign代理類時,代理類會調用SynchronousMethodHandler.invoke()創建RequestTemplate(url,參數)
      3、發出請求
      代理類會通過RequestTemplate創建Request,然后client(URLConnetct、HttpClient、OkHttp)使用Request發送請求

      4. Feign優化

      4.1. 開啟feign日志

      feign日志級別

      在consumer的yml文件中加入以下代碼

       
      feign:
        client:
          config:
            feign-provider: #此處寫的是服務名稱,針對我們feign微服務的配置,如果是default就是全局配置
              loggerLevel: full #配置Feign的日志級別,相當于代碼配置方式中的Logger
       
      #在application.yml中使用 logging.level.<Feign客戶端對應的接口的全限定名> 的參數配置格式來開啟指定客戶端日志
      logging:
        level:
          com.bjpowernode.feign: debug
      

      隨后啟動測試:
      出現以下結果表示日志輸出成功

      4.2 feign超時問題

      首先、Feign的負載均衡底層用的就是Ribbon,所以這里的請求超時配置其實就是配置Ribbon,當出現請求超時會出現以下報錯。

      注意 :當開啟日志配置之后,feign超時問題不會出現報錯情況。
      針對超時問題我們需要在之前的日志配置中加入以下內容

          ConnectTimeout: 5000 #請求連接的超時時間
          ReadTimeout: 5000 #請求處理的超時時間
      

      4.3 http連接池

      4.3.1 連接池介紹

      首先,我們知道HTTP連接需要經過三次握手,四次揮手的過程,這是很耗費性能的;所以HTTP連接池幫助我們節省了這一步。

          同時Feign的HTTP客戶端支持三種框架:
      
          HttpURLConnection、HttpClient、OkHttp;默認是HttpURLConnection
      

      4.3.2 連接池使用

      先引入依賴到公共接口工廠interfac,如果沒有做公共接口就放入consumer

          <dependency>
          <groupId>io.github.openfeign</groupId>
          <artifactId>feign-httpclient</artifactId>
          </dependency>
      

      講真的,其實這已經完成了,但是,我們還是要知道一下它的原理,否則顯得太片面了
      在配置文件中我們看到,連接池引入之后默認是開啟的,所以我們就不用再寫了

      4.3.4 zip壓縮

      壓縮能力:
      當 Gzip 壓縮到一個純文本文件時,效果是非常明顯的,大約可以減少 70%以上的文件大小。·
      這個開啟也是比較簡單,只需要在consumer中yml文件中寫入以下代碼即可

      此時在瀏覽器中就可以看到我們提供的壓縮方式,和瀏覽器支持的壓縮方式

      ====================
      原文鏈接:https://blog.csdn.net/F0217911/article/details/126370721

      posted on 2024-06-24 23:08  水吉z  閱讀(124)  評論(0)    收藏  舉報
       
      主站蜘蛛池模板: 久热99热这里只有精品| 97se亚洲综合自在线| 国产午夜一区二区在线观看| 亚洲电影天堂av2017| 国产一区二区三区色噜噜| 亚洲一区二区三区| 波多野结衣一区二区三区高清av| 国产精品一区二区不卡91| 岛国中文字幕一区二区| 九九热精品在线视频观看| 亚洲精品一区二区妖精| 国产精品午夜av福利| 台山市| 免费人妻无码不卡中文18禁| 亚洲精品国产综合久久一线| 亚洲成人av综合一区| 日本熟妇乱一区二区三区| 国产99青青成人A在线| 最近中文字幕日韩有码 | 色综合中文综合网| 国产精品夜夜春夜夜爽久久小说| 性色av免费观看| 亚洲色拍拍噜噜噜最新网站| 亚洲国产精品无码久久电影| 在线中文字幕亚洲日韩2020| 国产综合亚洲区在线观看| 国产旡码高清一区二区三区 | 午夜好爽好舒服免费视频| 国产农村老太xxxxhdxx| 无码人妻aⅴ一区二区三区蜜桃| 国产精品国产三级国产午| 国产 麻豆 日韩 欧美 久久| 色哟哟www网站入口成人学校| 天堂网av成人在线观看| 色伦专区97中文字幕| 毛片av在线尤物一区二区| 国产一区二区三区四区激情| 中国亚州女人69内射少妇| 97精品尹人久久大香线蕉| 国产精品成人亚洲一区二区| 国产精品人妻一区二区高|