亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用FeignClient設(shè)置動(dòng)態(tài)Url

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

FeignClient設(shè)置動(dòng)態(tài)Url

1. 需求描述

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

2. 實(shí)現(xiàn)方案

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

1.服務(wù)端:

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

2.客戶端:

maven依賴

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

客戶端代碼

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

調(diào)用接口

/**
?* 測(cè)試接口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. 細(xì)節(jié)分析

1.接口使用SpringMVC注解

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

2.springcloud openfeign自動(dòng)構(gòu)建實(shí)現(xiàn)類

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

其默認(rèn)的代理對(duì)象是 LoadBalancerFeignClient。還有一個(gè)代理對(duì)象是 feign.Client.Default。

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

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

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

name 屬性,是@FeignClient 注解必要的,不定義時(shí)會(huì)報(bào)錯(cuò)其默認(rèn)指代Eureka上的服務(wù)名。

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

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

某天,跟同學(xué)聊天,同學(xué)說起之前面試的時(shí)候面試官提的一個(gè)問題:使用spring cloud,現(xiàn)在某個(gè)服務(wù)有一個(gè)新的接口需要驗(yàn)證。該接口目前只上線了一臺(tái)機(jī)器,如何指定調(diào)用方只調(diào)用這臺(tái)機(jī)器。問題大致如此,可能有些出入。總結(jié)起來,就是希望能夠指定訪問某臺(tái)機(jī)器。這樣的情況,在我們平時(shí)也可能經(jīng)常遇到。比如甲乙兩人需要調(diào)試新接口,但注冊(cè)中心只有一個(gè)??赡苌厦嬗斜∥旒焊磷?cè)的服務(wù)。如果我們按照默認(rèn)的輪詢的負(fù)載均衡規(guī)則去調(diào)用,七次調(diào)用才能輪到乙的服務(wù),根本沒有辦法調(diào)試。所以這時(shí)候就需要我們能夠指定調(diào)用的服務(wù)方。

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

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

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

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

相關(guān)文章

  • Java中的FutureTask源碼解析

    Java中的FutureTask源碼解析

    這篇文章主要介紹了Java中的FutureTask源碼解析,FutureTask是一個(gè)可取消的異步計(jì)算,這個(gè)類是Future的實(shí)現(xiàn)類,有開始和取消一個(gè)計(jì)算的方法,如果一個(gè)計(jì)算已經(jīng)完成可以查看結(jié)果,需要的朋友可以參考下
    2023-12-12
  • SpringBoot 定制化返回?cái)?shù)據(jù)的實(shí)現(xiàn)示例

    SpringBoot 定制化返回?cái)?shù)據(jù)的實(shí)現(xiàn)示例

    這篇文章主要介紹了SpringBoot 定制化返回?cái)?shù)據(jù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring注解@Qualifier的使用&&與@Primary注解的不同

    Spring注解@Qualifier的使用&&與@Primary注解的不同

    今天帶你了解一下Spring框架中的@Qualifier?注解,它解決了哪些問題,以及如何使用它,我們還將了解它與?@Primary?注解的不同之處,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • maven 使用assembly 進(jìn)行打包的方法

    maven 使用assembly 進(jìn)行打包的方法

    這篇文章主要介紹了maven 使用assembly 進(jìn)行打包的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Spring MVC+FastJson+Swagger集成的完整實(shí)例教程

    Spring MVC+FastJson+Swagger集成的完整實(shí)例教程

    這篇文章主要給大家分享介紹了關(guān)于Spring MVC+FastJson+Swagger集成的完整實(shí)例教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • Java序列化原理詳解

    Java序列化原理詳解

    這篇文章主要介紹了Java序列化原理詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • 關(guān)于RedisTemplate之opsForValue的使用說明

    關(guān)于RedisTemplate之opsForValue的使用說明

    這篇文章主要介紹了關(guān)于RedisTemplate之opsForValue的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springboot靜態(tài)資源的配置方式

    springboot靜態(tài)資源的配置方式

    這篇文章主要介紹了springboot靜態(tài)資源的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 基于java文件上傳-原始的Servlet方式

    基于java文件上傳-原始的Servlet方式

    下面小編就為大家?guī)硪黄趈ava文件上傳-原始的Servlet方式。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring項(xiàng)目集成RabbitMQ及自動(dòng)創(chuàng)建隊(duì)列

    Spring項(xiàng)目集成RabbitMQ及自動(dòng)創(chuàng)建隊(duì)列

    這篇文章主要介紹了Spring項(xiàng)目集成RabbitMQ及自動(dòng)創(chuàng)建隊(duì)列,本文內(nèi)容分別在Spring(V5.2.6)和Spring Boot(V2.5.14)兩個(gè)項(xiàng)目中經(jīng)過了驗(yàn)證,需要的朋友可以參考下
    2024-02-02

最新評(píng)論