最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud整合OpenFeign實現(xiàn)微服務(wù)間的通信

 更新時間:2024年06月12日 11:54:43   作者:風(fēng)止?  
微服務(wù)之間的通信?式,通常有兩種: RPC 和 HTTP,在SpringCloud中, 默認(rèn)是使?HTTP來進(jìn)?微服務(wù)的通信, 最常?的實現(xiàn)形式有兩種:RestTemplate和OpenFeign,本文給大家介紹了SpringCloud整合OpenFeign實現(xiàn)微服務(wù)間的通信,需要的朋友可以參考下

1. 前言

1.1 為什么要使用OpenFeign?

雖說RestTemplate 對HTTP封裝后, 已經(jīng)?直接使?HTTPClient簡單?便很多, 但是還存在?些問題.

  1. 需要拼接URL, 靈活性?, 但是封裝臃腫, URL復(fù)雜時, 容易出錯.
  2. 代碼可讀性差, ?格不統(tǒng)?。

1.2 介紹一下微服務(wù)之間的通信方式

微服務(wù)之間的通信?式, 通常有兩種: RPC 和 HTTP.

在SpringCloud中, 默認(rèn)是使?HTTP來進(jìn)?微服務(wù)的通信, 最常?的實現(xiàn)形式有兩種:

  • RestTemplate
  • OpenFeign

RPC(Remote Procedure Call)遠(yuǎn)程過程調(diào)?,是?種通過?絡(luò)從遠(yuǎn)程計算機(jī)上請求服務(wù),?不需要了解底層?絡(luò)通信細(xì)節(jié)。RPC可以使?多種?絡(luò)協(xié)議進(jìn)?通信, 如HTTP、TCP、UDP等, 并且在TCP/IP?絡(luò)四層模型中跨越了傳輸層和應(yīng)?層。簡?之RPC就是像調(diào)?本地?法?樣調(diào)?遠(yuǎn)程?法。

常?的RPC框架有:

  • Dubbo: Apache Dubbo 中?
  • Thrift : Apache Thrift - Home
  •  gRPC: gRPC

1.3 OpenFeign介紹

OpenFeign 是?個聲明式的 Web Service 客戶端. 它讓微服務(wù)之間的調(diào)?變得更簡單, 類似于controller,調(diào)?service, 只需要創(chuàng)建?個接?,然后添加注解即可使?OpenFeign。

OpenFeign是一個基于Java的HTTP客戶端,它使得編寫和維護(hù)RESTful服務(wù)之間的通信變得更加簡單。通過使用注解和接口定義,開發(fā)者可以輕松地創(chuàng)建RESTful服務(wù)的客戶端,并且無需編寫大量的樣板代碼。

1.4 OpenFeign 的前?

Feign 是 Netflix 公司開源的?個組件.

  • 2013年6?, Netflix發(fā)布 Feign的第?個版本 1.0.0
  • 2016年7?, Netflix發(fā)布Feign的最后?個版本 8.18.0
  • 2016年,Netflix 將 Feign 捐獻(xiàn)給社區(qū)
  • 2016年7? OpenFeign 的?個版本 9.0.0 發(fā)布,之后?直持續(xù)發(fā)布到現(xiàn)在.

可以簡單理解為 Netflix Feign 是OpenFeign的祖先, 或者說OpenFeign 是Netflix Feign的升級版.

OpenFeign 是Feign的?個更強(qiáng)?更靈活的實現(xiàn).

2. OpenFeign的使用步驟

2.1 添加maven依賴          

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

2.2 添加注解

在啟動類上添加注解 @EnableFeignClients ,表示開啟OpenFeign的功能,Spring Boot 將會掃描指定的包路徑下的 Feign 客戶端接口,并自動創(chuàng)建代理對象。這些代理對象可以直接調(diào)用遠(yuǎn)程服務(wù)的 API,而無需手動編寫 HTTP 請求代碼。

@EnableEurekaServer 注解會啟動一個嵌入式的Eureka Server實例,該實例將會接受其他微服務(wù)的注冊,并且提供給其他微服務(wù)進(jìn)行服務(wù)發(fā)現(xiàn)和調(diào)用。這樣可以方便地構(gòu)建基于Eureka的服務(wù)注冊與發(fā)現(xiàn)系統(tǒng)。

注意:@Enable開頭的注解都表示:啟用某種特定的功能或配置。因為它們的主要作用是開啟一些特定的功能或配置選項。

2.3 編寫OpenFeign的客戶端 

//聲明一個Feign客戶端,value屬性指定了要調(diào)用的服務(wù)的名稱
//value屬性指定的服務(wù)名稱去服務(wù)注冊中心尋找對應(yīng)的服務(wù),無需手動編寫HTTP請求代碼
@FeignClient(value = "product-service",path = "/product")
public interface ProductApi {
    @RequestMapping("/product/{productId}")//指定跟哪個方法進(jìn)行綁定
    Product getProduct(@PathVariable Integer productId);
}

@FeignClient 注解作?在接?上, 參數(shù)說明:

  • name/value:指定FeignClient的名稱, 也就是微服務(wù)的名稱,?于服務(wù)發(fā)現(xiàn), Feign底層會使?
  • Spring Cloud LoadBalance進(jìn)?負(fù)載均衡. 也可以使? url 屬性指定?個具體的url.
  • path: 定義當(dāng)前FeignClient的統(tǒng)?前綴.

2.4 修改遠(yuǎn)程調(diào)用的方法

3. OpenFeign的參數(shù)傳遞 

這里介紹參數(shù)傳遞就是因為:OpenFeign接收參數(shù)使用的注解和SpringMvc不同。

傳遞簡單類型參數(shù) -> @RequestParam("參數(shù)名")

這里的注解是必須書寫的,不像mvc會根據(jù)名稱自動映射,你不寫就是null。

@RequestMapping("/p1")
String p1(@RequestParam("id") Integer id);
@RequestMapping("/p2")
String o2(@RequestParam("id") Integer id, @RequestParam("name") String name);

傳遞JavaBean對象 -> @SpringQueryMap

傳遞Json 數(shù)據(jù) -> @RequestBody

4.最佳實踐

最佳實踐:其實也就是經(jīng)過歷史的迭代, 在項?中的實踐過程中, 總結(jié)出來的最好的使用方式。

最佳實踐就是幫助我們繼續(xù)優(yōu)化代碼,我們也能看出來, Feign的客戶端與服務(wù)提供者的controller代碼非常相似。所以我們可以對其抽取一個類,需要的繼承即可。或者我們可以抽取成一個jar包需要的時候?qū)胍蕾嚰纯伞?/p>

4.1 Feign 的繼承    

Feign ?持繼承的方式, 我們可以把?些常?的操作封裝到接口里。我們可以定義好?個接?, 服務(wù)提供?實現(xiàn)這個接?, 服務(wù)消費?編寫Feign 接?的時候, 直接繼承這個接?。 具體參考: Spring Cloud OpenFeign Features :: Spring Cloud Openfeign 因為這種不是最優(yōu)的解法,我就不過多介紹了。

4.2 Feign 的抽取

官?推薦Feign的使??式為繼承的方式, 但是企業(yè)開發(fā)中, 更多是把Feign接?抽取為?個獨?的模塊 (做法和繼承相似, 但理念不同).

操作?法: 將Feign的Client抽取為?個獨?的模塊, 并把涉及到的實體類等都放在這個模塊中, 打成?個Jar. 服務(wù) 消費?只需要依賴該Jar包即可. 這種?式在企業(yè)中?較常?, Jar包通常由服務(wù)提供?來實現(xiàn).

 實現(xiàn)步驟

1.創(chuàng)建新的模塊 

2. 引入maven的依賴

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

3. 編寫api 

 

@FeignClient(value = "product-service",path = "/product")
public interface ProductApiInterface {
    @RequestMapping("/{productId}")//指定跟哪個方法進(jìn)行綁定
    Product getProduct(@PathVariable Integer productId);
}

4.安裝到本地倉庫      

5.服務(wù)消費方引入依賴并將其注入

        <!--引入自定義的product的feign客戶端-->
        <dependency>
            <groupId>com.csy</groupId>
            <artifactId>product-api</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
@EnableFeignClients(clients = {ProductApiInterface.class}) 在配置類,修改就會掃描,否則 SpringBoot只會掃描當(dāng)前包及其子包的Bean,所以第三方Bean需要聲明在配置類,但是 Feign開發(fā)商也想到這一點了,就提供了對應(yīng)的屬性。

不設(shè)置就會報下述錯誤:

你@Autowired注入了productApi這個Bean,但是我沒有找到。

結(jié)語

通過本文的介紹,我們了解了什么是OpenFeign以及如何在Spring Cloud應(yīng)用中使用

OpenFeign來實現(xiàn)微服務(wù)之間的通信。OpenFeign的強(qiáng)大功能和Spring Cloud的深度集成使得微服

以上就是SpringCloud整合OpenFeign實現(xiàn)微服務(wù)間的通信的詳細(xì)內(nèi)容,更多關(guān)于SpringCloud OpenFeign通信的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring MVC處理響應(yīng)的案例詳解

    Spring MVC處理響應(yīng)的案例詳解

    當(dāng)服務(wù)器向客戶端響應(yīng)數(shù)據(jù)時,SpringMVC框架會使用“轉(zhuǎn)換器”(Converter)將方法的返回值進(jìn)行轉(zhuǎn)換,SpringMVC框架還會自動使用不同的轉(zhuǎn)換器,因此這篇文章就給大家詳細(xì)介紹一下Spring MVC如何處理響應(yīng)并附上案例,需要的朋友可以參考下
    2023-06-06
  • 簡介Java編程中的Object類

    簡介Java編程中的Object類

    這篇文章主要介紹了簡介Java編程中的Object類,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • 一文掌握Spring的創(chuàng)建與使用

    一文掌握Spring的創(chuàng)建與使用

    這篇文章詳細(xì)介紹了spring的創(chuàng)建與使用,文章中有詳細(xì)的代碼示例和圖片介紹,對學(xué)習(xí)有一定的而參考價值,需要的同學(xué)可以參考一下
    2023-04-04
  • TC?集群Seata1.6高可用架構(gòu)源碼解析

    TC?集群Seata1.6高可用架構(gòu)源碼解析

    這篇文章主要為大家介紹了TC?集群Seata1.6高可用架構(gòu)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java實現(xiàn)提取HTML文件中的文本內(nèi)容

    Java實現(xiàn)提取HTML文件中的文本內(nèi)容

    從?HTML?文件中提取文本內(nèi)容是數(shù)據(jù)抓取中的一個常見任務(wù),本文主要和大家分享了如何使用免費?Java?API?從HTML?文件中提取文本內(nèi)容,需要的可以參考下
    2024-04-04
  • 詳解Java Socket通信封裝MIna框架

    詳解Java Socket通信封裝MIna框架

    Mina異步IO使用的Java底層JNI框架,Mina提供服務(wù)端和客戶端,將我們的業(yè)務(wù)解耦開發(fā),真正做到高內(nèi)聚低耦合的思想。
    2021-06-06
  • Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法

    Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法

    這篇文章主要介紹了Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法,涉及java數(shù)組與字符串的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • Java Spring 控制反轉(zhuǎn)(IOC)容器詳解

    Java Spring 控制反轉(zhuǎn)(IOC)容器詳解

    這篇文章主要為大家詳細(xì)介紹了Spring控制反轉(zhuǎn)IoC入門使用的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 在JAR文件中找不到主清單屬性的原因與解決方案

    在JAR文件中找不到主清單屬性的原因與解決方案

    在Java中,一個JAR文件通常包含一個名為MANIFEST.MF的清單文件,這個文件定義了關(guān)于JAR文件的各種元數(shù)據(jù),然而,有時我們可能會遇到一個問題,那就是在JAR文件中找不到主清單屬性,本文給大家介紹了JAR文件中找不到主清單屬性的原因和解決方案,需要的朋友可以參考下
    2024-04-04
  • Java深入講解異常處理try?catch的使用

    Java深入講解異常處理try?catch的使用

    這篇文章主要介紹了Java異常處理機(jī)制try?catch流程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-06-06

最新評論

叶城县| 遂溪县| 祥云县| 灵山县| 时尚| 南平市| 兴国县| 东阳市| 霸州市| 灵山县| 玉龙| 琼结县| 东兰县| 克什克腾旗| 哈巴河县| 泰宁县| 清镇市| 高雄市| 怀远县| 德令哈市| 永春县| 西乌珠穆沁旗| 清徐县| 家居| 桐柏县| 洛隆县| 彭阳县| 蕉岭县| 开阳县| 霍山县| 安陆市| 农安县| 白沙| 神木县| 马龙县| 敦煌市| 夹江县| 东山县| 亚东县| 赤壁市| 清涧县|