<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遠(yuǎn)程調(diào)用

          共 5007字,需瀏覽 11分鐘

           ·

          2021-09-20 09:51

          Feign入門(mén)

          Ribbon可以調(diào)用遠(yuǎn)程服務(wù),但是不是最佳的選擇,我們可以選擇Feign組件。


          Feign是在Ribbon的基礎(chǔ)上進(jìn)行了封裝。


          1. Feign簡(jiǎn)介

          Feign是Netflix開(kāi)發(fā)的聲明式、模板化的HTTP客戶端。

          • Feign可幫助我們更便捷,優(yōu)雅的調(diào)用HTTP API。

          • 在SpringCloud中,使用Feign非常簡(jiǎn)單--創(chuàng)建一個(gè)接口,并在接口上添加一些注解,代碼就完成了。

          • Feign支持多種注解,例如Feign自帶的注解或者JAX-RS注解等。

          • SpringCloud對(duì)Feign進(jìn)行了增強(qiáng),使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka從而讓Feign的使用更加方便。


          Feign具備了Ribbon的負(fù)載均衡功能和Eureka的服務(wù)注冊(cè)。


          使用feign我們更多的是關(guān)注服務(wù)消費(fèi)者,服務(wù)消費(fèi)者如何調(diào)用服務(wù)提供者微服務(wù)。



          2. 基于Feign遠(yuǎn)程服務(wù)調(diào)用


          使用feign步驟:

          1. 導(dǎo)入依賴

          2. 配置調(diào)用接口

          3. 在啟動(dòng)類(lèi)上激活feign

          4. 通過(guò)自定義的接口調(diào)用遠(yuǎn)程微服務(wù)


          1.導(dǎo)入Feigfn依賴
          在服務(wù)消費(fèi)者中加入依賴

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


          2.配置調(diào)用接口

          服務(wù)消費(fèi)者的合適包中創(chuàng)建feign遠(yuǎn)程調(diào)用微服務(wù)接口

          每個(gè)接口方法對(duì)應(yīng)的是服務(wù)提供者暴露的調(diào)用API

          /**
           *  Feign調(diào)用接口
           * 
           * 1.聲明需要調(diào)用的微服務(wù)名稱(chēng)
           * @FeignClient
           *      name:服務(wù)提供者名稱(chēng)
           */

          @FeignClient(name = "service-product"//服務(wù)提供者名稱(chēng)
          public interface ProductFeignClient {

              /**
               * 2.配置需要調(diào)用的微服務(wù)接口
               */

              @RequestMapping(value = "/product/{id}",method = RequestMethod.GET)
              public Product findById(@PathVariable("id") Integer id);
          }

          提示:@FeignClient請(qǐng)求ip路徑和@RequestMapping請(qǐng)求接口地址組成了請(qǐng)求RUL。

          • 定義各參數(shù)綁定時(shí), @PathVariable,@RequestParam,@RequestHeader等可以指定參數(shù)屬性,在Feign中綁定參數(shù)必須通過(guò)value屬性來(lái)指明具體的參數(shù)名,不然會(huì)拋出異常

          • @FeignClient :注解通過(guò)name指定需要調(diào)用的微服務(wù)的名稱(chēng),用于創(chuàng)建Ribbon的負(fù)載均衡器。所以Ribbon會(huì)把service-product這個(gè)微服務(wù)解析為注冊(cè)中心的服務(wù)。


          3.啟動(dòng)類(lèi)開(kāi)啟激活feign

          服務(wù)消費(fèi)者啟動(dòng)類(lèi)開(kāi)啟feign注解

          /**
           * 訂單服務(wù)啟動(dòng)類(lèi) (服務(wù)消費(fèi)者)
           * @Author 黃柏茗
           * @Date 2021-09-09
           */

          //激活feign
          @EnableFeignClients
          @SpringBootApplication
          public class OrderApplication {
              public static void main(String[] args) {
                  SpringApplication.run(OrderApplication.class,args);
                  System.err.println("訂單微服務(wù)啟動(dòng)成功");
              }
          }



          4.通過(guò)feign接口進(jìn)行遠(yuǎn)程調(diào)用微服務(wù)

          服務(wù)消費(fèi)者中調(diào)用feign接口進(jìn)行遠(yuǎn)程訪問(wèn)微服務(wù)

          /**
           * 訂單Controller
           */

          @RestController
          public class OrderController {

              /**
               * 1.注入feign調(diào)用接口
                */
                  
              @Autowired
              private ProductFeignClient productFeignClient;

              /**
               * 下訂單
               * @param id
               * @return
               */

              @RequestMapping("/buy/{id}")
              public Product getProductById(@PathVariable Integer id) {
                  //2.使用feign接口進(jìn)行遠(yuǎn)程服務(wù)調(diào)用微服務(wù)
                  Product product = productFeignClient.findById(id);
                 return product;
              }

          我們?cè)谡{(diào)用的時(shí)候,可以發(fā)現(xiàn),在遠(yuǎn)程調(diào)用微服務(wù)的時(shí)候,不用拼接URL了,更


          測(cè)試:



          5. Feign和Ribbon的關(guān)系

          Ribbon是一個(gè)基于HTTP和TCP客戶端的負(fù)載均衡的工具。

          它可以在客戶端配置RibbonServerList (服務(wù)端列表) ,使用HttpClient或RestTemplate模擬http請(qǐng)求,步驟相當(dāng)繁瑣。


          Feign是在Ribbon的基礎(chǔ)上進(jìn)行了一次改進(jìn),是一個(gè)使用起來(lái)更加方便的HTTP客戶端。采用接口的方式,只需要?jiǎng)?chuàng)建一個(gè)接口,然后在上面添加注解即可,將需要調(diào)用的其他服務(wù)的方法定義成抽象方法即可,不需要自己構(gòu)建http請(qǐng)求。然后就像是調(diào)用自身工程的方法調(diào)用,而感覺(jué)不到是調(diào)用遠(yuǎn)程方法,使得編寫(xiě)客戶端變得非常容易。


          簡(jiǎn)單理解:

          Feigin天生具備負(fù)載均衡功能,



          6.負(fù)載均衡

          feign本身已經(jīng)集成了Ribbon依賴和自動(dòng)配置,因此我們不需要額外的引入依賴,也不需要注冊(cè)RestTemplate對(duì)象。


          feign基于ribbon。


          我們可以像配置Ribbon那樣去配置負(fù)載均衡配置,通過(guò) riboon.xx 進(jìn)行全局配置,也可以通過(guò) 服務(wù)名.ribbon.xx 來(lái)指定服務(wù)配置。


          使用Ribbon的配置來(lái)修改負(fù)載均衡配置即可。


          測(cè)試環(huán)境基于Eureka。

          模擬啟動(dòng)2個(gè)提供相同的微服。



          測(cè)試:



          7.請(qǐng)求壓縮

          SpringCloud Feign支持對(duì)請(qǐng)求或響應(yīng)的數(shù)據(jù)進(jìn)行GZIP壓縮,減少通信過(guò)程中的性能損耗。


          消費(fèi)者使用數(shù)據(jù)壓縮配置即可。


          開(kāi)啟請(qǐng)求與響應(yīng)的壓縮功能:

          #開(kāi)啟feign請(qǐng)求與響應(yīng)的數(shù)據(jù)壓縮
          feign:
            compression:
              request:
                enabled: true #開(kāi)啟請(qǐng)求壓縮
              response: true #開(kāi)啟請(qǐng)求壓縮


          8.Feign日志級(jí)別

          開(kāi)發(fā)階段希望看到Feign請(qǐng)求過(guò)程的日志記錄,默認(rèn)Feign日志是不開(kāi)啟的。

          想要使用配置方式來(lái)達(dá)到日志效果,在yml文件配置即可。


          使用簡(jiǎn)單,配置壓yml文件即可。

          消費(fèi)者中修改yml,增加feign的日志配置

          #開(kāi)啟feign請(qǐng)求與響應(yīng)的數(shù)據(jù)壓縮
          feign:
            compression:
              request:
                enabled: true #開(kāi)啟請(qǐng)求壓縮
              response: true #開(kāi)啟請(qǐng)求壓縮
           
           #Feign日志輸出 (看這里?。。。。?/span>
            # 日志配置:NONE:不輸出日志  BASIC:適用于生產(chǎn)環(huán)境追蹤問(wèn)題 HEADERS:在BASIC基礎(chǔ)上記錄請(qǐng)求和響應(yīng)頭信息 FULL:記錄所有
            client:
              config:
                service-product: #需要調(diào)用的服務(wù)名稱(chēng)
                  loggerLevel: FULL
          #日志輸出
          logging:
            level:
              com.hbm.order.feign.ProductFeignClient: debug #可選擇feign的接口全限定類(lèi)名



          測(cè)試到服務(wù)調(diào)用時(shí),F(xiàn)eign調(diào)用日志已經(jīng)輸出




          總結(jié):

          重點(diǎn)是在Feign的使用

          使用feign步驟:

          1. 導(dǎo)入依賴

          2. 配置調(diào)用接口

          3. 在啟動(dòng)類(lèi)上激活feign

          4. 通過(guò)自定義的接口調(diào)用遠(yuǎn)程微服務(wù)


          瀏覽 105
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  一本大道HEYZO无码专区 一道本一区二区三区免费视频 | 婷婷性爱祝频 | 豆花成人无码视频 | 国产人妻精品一区二区三区不卡 | 国产精品在线观看成人视频 |