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

使用FeignClient設置動態(tài)Url

 更新時間:2022年06月28日 11:35:51   作者:靖節(jié)先生  
這篇文章主要介紹了使用FeignClient設置動態(tài)Url方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

FeignClient設置動態(tài)Url

1. 需求描述

一般情況下,微服務內(nèi)部調(diào)用都是通過注冊中心,eureka,zookeeper,nacos等實現(xiàn)動態(tài)調(diào)用,但是對于一些外部http調(diào)用,對于不在同一微服務內(nèi),不在同一注冊中心的服務調(diào)用,可以考慮SpringCloudOpenFeign,而且可以實現(xiàn)動態(tài)URL,通過參數(shù)動態(tài)控制。

2. 實現(xiàn)方案

服務端正常springboot項目,也不一定是springboot項目,只要正常提供RESTFul接口就可以,本次測試以springboot為例。主要是客戶端調(diào)用。

1.服務端:

/**
?* (Category)控制層
?*
?* @author makejava
?* @since 2021-06-03 07:20:41
?*/
@RestController
@RequestMapping("/category")
public class CategoryController {
? ? /**
? ? ?* 服務對象
? ? ?*/
? ? @Resource
? ? private CategoryService categoryService;
? ? /**
? ? ?* 測試服務
? ? ?*/
? ? @GetMapping("/test")
? ? public Response test() {
? ? ? ? return Response.createSuccessResponse("查詢成功", "我是測試服務");
? ? }
}

2.客戶端:

maven依賴

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

客戶端代碼

/**
?* 測試
?* @author zrj
?* @since 2021-07-25
?*/
@Api(value = "微盟鑒權測試")
@RestController
@RequestMapping("/weimob")
public class ActivityController {
? ? @Resource
? ? private CategoryService categoryService;
? ? @GetMapping("/test")
? ? @ApiOperation(value = "微盟獲取Code")
? ? public Response test() throws URISyntaxException {
? ? ? ? System.out.println("-----測試-----");
? ? ? ? URI uri = new URI("http://localhost:8080/category/test");
? ? ? ? Response response = categoryService.test(uri);
? ? ? ? return Response.createSuccessResponse("查詢成功", response);
? ? }
}

調(diào)用接口

/**
?* 測試接口Openfeign
?* @author zrj
?* @since 2021/7/25
?**/
@Service("WeimobAuthorize")
@FeignClient(url = "http://localhost:8080/category", name = "CategoryService")
public interface CategoryService {
? ? @GetMapping
? ? Response test(URI uri);
}

3. 細節(jié)分析

1.接口使用SpringMVC注解

接口方法的定義使用了SpringMVC的注解 @GetMapping、@RequestParam,其實SpringMVC的其他注解在此處都是支持的。(有其他文章提到也支持OpenFeign原有的注解@RequestLine、@Param等,但博主實測是不支持的,相關解析類為 feign.Contract,這個存疑)。

2.springcloud openfeign自動構建實現(xiàn)類

在使用方式上,OpenFeign需要手動構建代理對象,Spring Cloud OpenFeign 不同于 OpenFeign, Spring Cloud OpenFeign 幫我們自動生成了接口的代理對象(即實現(xiàn)類),并且注冊到Spring中,我們可以很方便的使用 @Autowired 注入代理對象然后使用。

其默認的代理對象是 LoadBalancerFeignClient。還有一個代理對象是 feign.Client.Default。

兩者區(qū)別在于:LoadBalancerFeignClient 通過服務名(下文提到)從Eureka查找相關的節(jié)點地址url,發(fā)起調(diào)用。feign.Client.Default 僅是簡單的直接調(diào)用。

3.FeignClient屬性name與URL一定要指定

@FeignClient(url = “http://localhost:8080/category”, name = “CategoryService”)

name 屬性,是@FeignClient 注解必要的,不定義時會報錯其默認指代Eureka上的服務名。

url 屬性,一定要指定,這是重點了! url屬性指定什么值其實不重要,因為最終都會被方法的URI參數(shù)值替換掉,它在這里另一個重要的作用,就是將接口的代理對象變成feign.Client.Default(上文提到默認是LoadBalancerFeignClient),這樣就繞過了從Eureka取節(jié)點地址這一步,畢竟第三方的地址不可能注冊到我們的Eureka上。(相關細節(jié)可自行debug FeignClientFactoryBean.getTarget())

FeignClient注解配置url屬性實現(xiàn)指定服務方

某天,跟同學聊天,同學說起之前面試的時候面試官提的一個問題:使用spring cloud,現(xiàn)在某個服務有一個新的接口需要驗證。該接口目前只上線了一臺機器,如何指定調(diào)用方只調(diào)用這臺機器。問題大致如此,可能有些出入??偨Y起來,就是希望能夠指定訪問某臺機器。這樣的情況,在我們平時也可能經(jīng)常遇到。比如甲乙兩人需要調(diào)試新接口,但注冊中心只有一個??赡苌厦嬗斜∥旒焊磷缘姆铡H绻覀儼凑漳J的輪詢的負載均衡規(guī)則去調(diào)用,七次調(diào)用才能輪到乙的服務,根本沒有辦法調(diào)試。所以這時候就需要我們能夠指定調(diào)用的服務方。

FeignClient注解通過配置url屬性可以指定調(diào)用的服務方。我們按照上面的例子,假設乙的IP為192.168.1.2,在端口8080上啟動的服務,那我們就可以把我們的url配置成http://192.168.1.2:8080。這樣調(diào)用的就一直是乙的服務了。

那我們配置了url和不配置url到底產(chǎn)生了哪些不同呢?

feign,或者說open-feign底層是使用,我以為默認是httpclient,但是我debug的結果是HttpURLConnection。知道為什么的可以留言告訴我。feign會基于配置,生成URI。當我們不配置url的時候,URI是這樣的http://service-name/path。使用FeignClien是LoadBalancerFeignClient,該類在處理該URI的時候會對服務名進行解析,也就是從注冊中心查詢該服務名下已經(jīng)注冊的服務器信息,包括IP和端口。然后將服務名替換成真實的鏈接。而當我們不配置url的時候,使用的FeignClient是Client的默認實現(xiàn)Default,該類就沒有解析的這一步而是直接通過HttpURLConnection進行請求。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 淺談Java后臺對JSON格式的處理操作

    淺談Java后臺對JSON格式的處理操作

    下面小編就為大家?guī)硪黄獪\談Java后臺對JSON格式的處理操作。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java使用單鏈表實現(xiàn)約瑟夫環(huán)

    Java使用單鏈表實現(xiàn)約瑟夫環(huán)

    這篇文章主要為大家詳細介紹了Java使用單鏈表實現(xiàn)約瑟夫環(huán),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java正則表達式匹配電話格式

    Java正則表達式匹配電話格式

    正則表達式是由普通的字符以及特殊字符組成的文字模式,用來在查找文字主體時待匹配的一個或多個字符串。本文給大家介紹java正則表達式匹配電話格式,對java正則表達式匹配相關知識感興趣的朋友一起學習吧
    2015-11-11
  • Java分析Lambda表達式Stream流合并分組內(nèi)對象數(shù)據(jù)合并

    Java分析Lambda表達式Stream流合并分組內(nèi)對象數(shù)據(jù)合并

    Lambda表達式,基于Lambda所帶來的函數(shù)式編程,又引入了一個全新的Stream概念,用于解決集合類庫既有的弊端,Lambda 允許把函數(shù)作為一個方法的參數(shù)(函數(shù)作為參數(shù)傳遞進方法中)。使用 Lambda 表達式可以使代碼變的更加簡潔緊湊
    2022-12-12
  • 基于Properties類操作.properties配置文件方法總結

    基于Properties類操作.properties配置文件方法總結

    這篇文章主要介紹了Properties類操作.properties配置文件方法總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 深入Java對象的地址的使用分析

    深入Java對象的地址的使用分析

    本篇文章介紹了,Java對象的地址的使用分析。需要的朋友參考下
    2013-05-05
  • java+testng+selenium的自動化測試實例

    java+testng+selenium的自動化測試實例

    這篇文章主要介紹了java+testng+selenium的自動化測試實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 淺談SpringBoot優(yōu)化技巧

    淺談SpringBoot優(yōu)化技巧

    這篇文章主要介紹了淺談SpringBoot優(yōu)化技巧,需要的朋友可以參考下。
    2017-09-09
  • Spring實現(xiàn)內(nèi)置監(jiān)聽器

    Spring實現(xiàn)內(nèi)置監(jiān)聽器

    這篇文章主要介紹了Spring 實現(xiàn)自定義監(jiān)聽器案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧,希望能給你帶來幫助
    2021-07-07
  • java基礎之類初始化順序示例解析

    java基礎之類初始化順序示例解析

    這篇文章主要為大家介紹了java基礎之類初始化順序示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10

最新評論

汝城县| 蒙山县| 金秀| 长宁区| 肃北| 新安县| 辽宁省| 牡丹江市| 贡觉县| 克什克腾旗| 包头市| 兴海县| 湖口县| 久治县| 麻城市| 河池市| 巴中市| 雅江县| 安顺市| 桂林市| 连城县| 漠河县| 武陟县| 茌平县| 潢川县| 云南省| 建湖县| 青神县| 贵溪市| 铁岭县| 西贡区| 青州市| 刚察县| 嘉善县| 资源县| 百色市| 浮山县| 颍上县| 尼勒克县| 东安县| 鹤山市|