一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - SpringCloud升級(jí)2020.0.x版之OpenFeign簡(jiǎn)介與使用實(shí)現(xiàn)思路

SpringCloud升級(jí)2020.0.x版之OpenFeign簡(jiǎn)介與使用實(shí)現(xiàn)思路

2022-01-25 13:39干貨滿滿張哈希 Java教程

在微服務(wù)系統(tǒng)中,我們經(jīng)常會(huì)進(jìn)行 RPC 調(diào)用。在 Spring Cloud 體系中,RPC 調(diào)用一般就是 HTTP 協(xié)議的調(diào)用。對(duì)于每次調(diào)用,都要經(jīng)過(guò)一系列詳細(xì)步驟,接下來(lái)通過(guò)本文給大家介紹SpringCloud OpenFeign簡(jiǎn)介與使用,感興趣的朋友一起看看吧

SpringCloud升級(jí)2020.0.x版之OpenFeign簡(jiǎn)介與使用實(shí)現(xiàn)思路

本系列代碼地址:https://github.com/JoJoTec/spring-cloud-parent

 

OpenFeign 的由來(lái)和實(shí)現(xiàn)思路

在微服務(wù)系統(tǒng)中,我們經(jīng)常會(huì)進(jìn)行 RPC 調(diào)用。在 Spring Cloud 體系中,RPC 調(diào)用一般就是 HTTP 協(xié)議的調(diào)用。對(duì)于每次調(diào)用,基本都要經(jīng)過(guò)如下步驟:

  • 找到微服務(wù)實(shí)例列表并選擇一個(gè)實(shí)例
  • 調(diào)用參數(shù)序列化
  • 使用 Http 客戶端將請(qǐng)求發(fā)送出去
  • 響應(yīng)處理,反序列化等等

除了這些公共邏輯,業(yè)務(wù)上只需要定義參數(shù),HTTP 方法,HTTP URI,響應(yīng)就可以,也就是使用接口就能定義:

interface HttpBin {
  @Get(uri = "/get")
  String get(@Param("param") String param);
}

例如上面這個(gè)接口,就定義了一個(gè) HTTP 請(qǐng)求,HTTP 方法為 GET,路徑是 /get,參數(shù)是 param,響應(yīng)為 String 類型。之后只要定義好公共邏輯,就能使用這個(gè)接口進(jìn)行調(diào)用了。

對(duì)于這些公共邏輯的實(shí)現(xiàn)設(shè)計(jì),我們很自然的就能想到切面與動(dòng)態(tài)代理。之前的章節(jié),我們提到過(guò) JDK 中有針對(duì)接口的動(dòng)態(tài)代理,其實(shí)就是實(shí)現(xiàn) java.lang.reflect.InvocationHandler 然后針對(duì)這個(gè)接口實(shí)現(xiàn)代理類。之后使用這個(gè)代理類進(jìn)行調(diào)用即可走入 InvocationHandler 中定義的邏輯。

以上,就是 OpenFeign 的設(shè)計(jì)實(shí)現(xiàn)思路與用途。

 

OpenFeign 簡(jiǎn)介

OpenFeign 是一個(gè)基于聲明式(通過(guò)類元數(shù)據(jù)定義,例如注解等)定義的 HTTP 請(qǐng)求客戶端。這個(gè)庫(kù)可以讓你通過(guò)注解來(lái)自動(dòng)生成調(diào)用對(duì)應(yīng) HTTP 服務(wù)的客戶端,從代碼上看調(diào)用這個(gè)遠(yuǎn)程服務(wù)和調(diào)用本地服務(wù)方法一樣。OpenFeign 支持多種 HTTP 注解,包括 Feign 注解和 JAX-RS 注解,并且可以通過(guò)配置類似于插件的形式支持不同種類的注解。同時(shí),還可以配置編碼器,解碼器,來(lái)編碼請(qǐng)求并解碼響應(yīng)。底層的 HTTP Client 也是可以配置的,你可以使用 Java 原生的 Http 鏈接,也可以使用 Apache HttpClient 還有 OkHttpClient 等等。

目前 OpenFeign 還在不斷迭代更新中,可以通過(guò)這個(gè)鏈接查看當(dāng)前的 RoadMap。當(dāng)前我們使用的是 OpenFeign 11,當(dāng)前實(shí)現(xiàn)中或者計(jì)劃中的特性包括:

  • 響應(yīng)緩存,支持進(jìn)程內(nèi)或者跨進(jìn)程響應(yīng)緩存(實(shí)現(xiàn)中)
  • 實(shí)現(xiàn)更完善的 URI 模板支持(實(shí)現(xiàn)中)
  • 重構(gòu) Logger 日志 API(實(shí)現(xiàn)中)
  • 重構(gòu) Retry 重試 API(實(shí)現(xiàn)中)
  • 采集指標(biāo)相關(guān) API(下一步要實(shí)現(xiàn))
  • 通過(guò) CompletableFuture 作為基礎(chǔ)類,實(shí)現(xiàn)異步 API(當(dāng)前已經(jīng)有基本實(shí)現(xiàn),下一步完整實(shí)現(xiàn))
  • 響應(yīng)式 API (下一步要實(shí)現(xiàn))
  • 斷路器相關(guān)支持(計(jì)劃中)

 

OpenFeign 基本使用

我們先來(lái)看 OpenFeign 的使用,先不關(guān)心 Spring Cloud 環(huán)境下如何使用,這樣更能理解其底層原理。單獨(dú)使用 OpenFeign 分以下幾步:

  1. 定義遠(yuǎn)程 HTTP 調(diào)用 API 接口
  2. 創(chuàng)建 Feign 代理的 HTTP 調(diào)用接口實(shí)現(xiàn)
  3. 使用代理類進(jìn)行調(diào)用

具體例子是:

interface GitHub {
  /**
   * 定義get方法,包括路徑參數(shù),響應(yīng)返回序列化類
   * @param owner
   * @param repository
   * @return
   */
  @RequestLine("GET /repos/{owner}/{repo}/contributors")
  List<Contributor> contributors(@Param("owner") String owner, @Param("repo") String repository);

  /**
   * 響應(yīng)體結(jié)構(gòu)類
   */
  class Contributor {
      String login;
      int contributions;

      public Contributor() {
      }

      public String getLogin() {
          return login;
      }

      public void setLogin(String login) {
          this.login = login;
      }

      public int getContributions() {
          return contributions;
      }

      public void setContributions(int contributions) {
          this.contributions = contributions;
      }
  }
}

public static void main(String[] args) {
  //創(chuàng)建 Feign 代理的 HTTP 調(diào)用接口實(shí)現(xiàn)
  GitHub github = Feign.builder()
                      //指定解碼器為 FastJsonDecoder
                      .decoder(new FastJsonDecoder())
                      //指定代理類為 GitHub,基址為 https://api.github.com
                      .target(GitHub.class, "https://api.github.com");
  List<GitHub.Contributor> contributors = github.contributors("OpenFeign", "feign");
}


/**
* 基于 FastJson 的反序列化解碼器
*/
static class FastJsonDecoder implements Decoder {
  @Override
  public Object decode(Response response, Type type) throws IOException, DecodeException, FeignException {
      //讀取 body
      byte[] body = response.body().asInputStream().readAllBytes();
      return JSON.parseObject(body, type);
  }
}

在上面這個(gè)例子中,我們定義了訪問(wèn) GET https://api.github.com/repos/{owner}/{repo}/contributors 這個(gè)接口的 OpenFeign 客戶端,并自定義了響應(yīng)解碼器,反序列化了響應(yīng)體。這就是 OpenFeign 的基本使用。

SpringCloud升級(jí)2020.0.x版之OpenFeign簡(jiǎn)介與使用實(shí)現(xiàn)思路

我們這一節(jié)詳細(xì)介紹了 OpenFeign 的設(shè)計(jì)思路以及 RoadMap,了解這些之后,我們?cè)賮?lái)詳細(xì)分析 Openfeign,就能理解其中的一些設(shè)計(jì)以及使用思路了。并且某些重構(gòu)中的特性,我們?cè)谑褂弥行枰裢庾⒁猓贿^(guò)也不必?fù)?dān)心,因?yàn)樵?Spring Cloud 中使用 OpenFeign 的特性都是通過(guò)加入膠水項(xiàng)目依賴實(shí)現(xiàn)的,底層 API 重構(gòu)是膠水項(xiàng)目需要關(guān)心的事情。

到此這篇關(guān)于SpringCloud升級(jí)2020.0.x版之OpenFeign簡(jiǎn)介與使用實(shí)現(xiàn)思路的文章就介紹到這了,更多相關(guān)SpringCloud OpenFeign簡(jiǎn)介與使用內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/zhxdick/p/15364968.html

延伸 · 閱讀

精彩推薦
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒(méi)有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
主站蜘蛛池模板: 九九99香蕉在线视频美国毛片 | 男女被爆动漫羞羞动漫 | 范冰冰性xxxxhd | 喜马拉雅听书免费版 | 久久se视频精品视频在线 | 99精品全国免费7观看视频 | 村妇超级乱淫伦小说全集 | 亚洲欧美自偷自拍另类小说 | 国产一级一级一级成人毛片 | 天天拍天天色 | 国产伦码精品一区二区 | 亚洲国产成人久久综合一区77 | 深夜视频免费看 | 日韩亚洲欧美综合一区二区三区 | 为什么丈夫插我我却喜欢被打着插 | 毛片亚洲毛片亚洲毛片 | 美女奶口隐私免费视频网站 | 青青草成人影院 | 色综色天天综合网 | 青青草国产精品久久久久 | 日本www视频在线观看 | 日b在线| 国产精品制服丝袜白丝www | 禁忌h1v1怀孕 | 农村脱精光一级 | 2020年国产精品午夜福利在线观看 | 亚洲精品中文字幕第一区 | 日本丰满www色 | 免费一级黄 | 满城尽带黄金甲大胸片 | 99精品网| 免费一看一级欧美 | 三级无删减高清在线影院 | 免费高清www动漫视频播放器 | 国产免费看视频 | 天堂色 | 423hk四虎 | 女女性恋爱视频入口 | 亚洲 日韩经典 中文字幕 | 国产精品日本一区二区不卡视频 | 色综合色狠狠天天久久婷婷基地 |