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

SpringCloud Feign遠(yuǎn)程調(diào)用與自定義配置詳解

 更新時(shí)間:2022年11月16日 15:23:46   作者:愛吃豆的土豆  
Feign是Netflix公司開發(fā)的一個(gè)聲明式的REST調(diào)用客戶端; Ribbon負(fù)載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進(jìn)行微服務(wù)開發(fā)非?;A(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時(shí)出現(xiàn)的,而且配置也都非常相似

Feign遠(yuǎn)程調(diào)用

1.1、Feign概述

Feign是一款Java語言編寫的HttpClient綁定器,在Spring Cloud微服務(wù)中用于實(shí)現(xiàn)微服務(wù)之間的聲明式調(diào)用。Feign 可以定義請(qǐng)求到其他服務(wù)的接口,用于微服務(wù)間的調(diào)用,不用自己再寫http請(qǐng)求(eg:使用spring自帶的restTemplate或者h(yuǎn)ttpClinents工具構(gòu)建http請(qǐng)求調(diào)用第三方服務(wù)接口,在客戶端實(shí)現(xiàn),調(diào)用此接口就像遠(yuǎn)程調(diào)用其他服務(wù)一樣,當(dāng)請(qǐng)求出錯(cuò)時(shí)可以調(diào)用接口的實(shí)現(xiàn)類來返回

Feign是一個(gè)聲明式的web service客戶端,它使得編寫web service客戶端更為容易。

創(chuàng)建接口,為接口添加注解,即可使用Feign。

Feign可以使用Feign注解或者JAX-RS注解,還支持熱插拔的編碼器和解碼器。

Spring Cloud為Feign添加了Spring MVC的注解支持,并整合了Ribbon和Eureka來為使用Feign時(shí)提供負(fù)載均衡。

1.2、Feign替代RestTemplate

先來看我們以前利用RestTemplate發(fā)起遠(yuǎn)程調(diào)用的代碼

存在下面的問題:

•代碼可讀性差,編程體驗(yàn)不統(tǒng)一

•參數(shù)復(fù)雜URL難以維護(hù)

Feign是一個(gè)聲明式的http客戶端,官方地址:https://github.com/OpenFeign/feign

其作用就是幫助我們優(yōu)雅的實(shí)現(xiàn)http請(qǐng)求的發(fā)送,解決上面提到的問題。

1.2.1 引入依賴

我們?cè)趏rder-service服務(wù)的pom文件中引入feign的依賴:

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

1.2.2 添加注解

在order-service的啟動(dòng)類添加注解開啟Feign的功能:

@SpringBootApplication
@EnableDiscoveryClient  //服務(wù)發(fā)現(xiàn)
@EnableFeignClients  //開啟遠(yuǎn)程調(diào)用
public class TestNacosConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestNacosConsumerApplication.class, args );
    }
}

1.2.3. 編寫Feign的消費(fèi)服務(wù)提供服務(wù)

消費(fèi)服務(wù)調(diào)用提供服務(wù)

消費(fèi)服務(wù)Feign接口,用來請(qǐng)求提供服務(wù)

service-consumer服務(wù):

編寫Controller層調(diào)用Feign:

@RestController
@RequestMapping("/feign")
public class TestFeignController {
    @Resource
    private EchoFeign echoFeign;
    @GetMapping("/echo")
    public String echo(){
        //調(diào)用Feign
        String echo = echoFeign.tudou();
        return "consumer-->"+echo;
    }
}

編寫Feign接口:

@FeignClient(value = "service-provider",path = "test")
public interface EchoFeign {
    @GetMapping("/tudou")
    public String tudou() ;
}

service-provider服務(wù):

編寫Controller層提供被調(diào)用:

@RestController
@RequestMapping("/test")
public class EchoController {
    @Resource
    private HttpServletRequest request;
    @Resource
    private PatternProperties patternProperties;
    @GetMapping("/tudou")
    public String tudou() {
        int serverPort = request.getServerPort();
        System.out.println(serverPort);
        return "你好nacos服務(wù),我是愛吃豆的土豆 " + ":" + serverPort;
    }

1.2.4 測(cè)試

訪問路徑訪問消費(fèi)服務(wù),得到提供服務(wù)的結(jié)果:http://localhost:8071/feign/echo

1.2.5 總結(jié)

使用Feign的步驟:

① 引入依賴

② 添加@EnableFeignClients注解

③ 編寫FeignClient接口

④ 使用FeignClient中定義的方法代替RestTemplate

1.3、自定義配置

Feign可以支持很多的自定義配置,如下表所示:

類型作用說明
feign.Logger.Level修改日志級(jí)別包含四種不同的級(jí)別:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder響應(yīng)結(jié)果的解析器http遠(yuǎn)程調(diào)用的結(jié)果做解析,例如解析json字符串為java對(duì)象
feign.codec.Encoder請(qǐng)求參數(shù)編碼將請(qǐng)求參數(shù)編碼,便于通過http請(qǐng)求發(fā)送
feign. Contract支持的注解格式默認(rèn)是SpringMVC的注解
feign. Retryer失敗重試機(jī)制請(qǐng)求失敗的重試機(jī)制,默認(rèn)是沒有,不過會(huì)使用Ribbon的重試

一般情況下,默認(rèn)值就能滿足我們使用,如果要自定義時(shí),只需要?jiǎng)?chuàng)建自定義的@Bean覆蓋默認(rèn)Bean即可。

下面以日志為例來演示如何自定義配置。

1.3.1 方式一配置文件方式

基于配置文件修改feign的日志級(jí)別可以針對(duì)單個(gè)服務(wù):局部生效

feign:  
  client:
    config: 
      userservice: # 針對(duì)某個(gè)微服務(wù)的配置
        loggerLevel: FULL #  日志級(jí)別 

也可以針對(duì)所有服務(wù):全局生效

feign:  
  client:
    config: 
      default: # 這里用default就是全局配置,如果是寫服務(wù)名稱,則是針對(duì)某個(gè)微服務(wù)的配置
        loggerLevel: FULL #  日志級(jí)別 

而日志的級(jí)別分為四種:

  • NONE:不記錄任何日志信息,這是默認(rèn)值。
  • BASIC:僅記錄請(qǐng)求的方法,URL以及響應(yīng)狀態(tài)碼和執(zhí)行時(shí)間
  • HEADERS:在BASIC的基礎(chǔ)上,額外記錄了請(qǐng)求和響應(yīng)的頭信息
  • FULL:記錄所有請(qǐng)求和響應(yīng)的明細(xì),包括頭信息、請(qǐng)求體、元數(shù)據(jù)。

1.3.2 方式二Java代碼方式

也可以基于Java代碼來修改日志級(jí)別,先聲明一個(gè)類,然后聲明一個(gè)Logger.Level的對(duì)象:

public class DefaultFeignConfiguration  {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC; // 日志級(jí)別為BASIC
    }
}

如果要**全局生效**,將其放到啟動(dòng)類的@EnableFeignClients這個(gè)注解中:

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class) 

如果是**局部生效**,則把它放到對(duì)應(yīng)的@FeignClient這個(gè)注解中:

@FeignClient(value = "userservice", configuration = DefaultFeignConfiguration .class)

總結(jié):

Feign的日志配置:

1. 方式一是配置文件, feign.client.config.xxx.loggerLevel

① 如果 xxx 是 default 則代表全局

② 如果 xxx 是服務(wù)名稱,例如 userservice 則代表某服務(wù)

2. 方式二是 java 代碼配置 Logger.Level 這個(gè) Bean

① 如果在 @EnableFeignClients 注解聲明則代表全局

② 如果在 @FeignClient 注解中聲明則代表某服務(wù)

到此這篇關(guān)于SpringCloud Feign遠(yuǎn)程調(diào)用與自定義配置詳解的文章就介紹到這了,更多相關(guān)SpringCloud Feign遠(yuǎn)程調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一口氣說出Java 6種延時(shí)隊(duì)列的實(shí)現(xiàn)方法(面試官也得服)

    一口氣說出Java 6種延時(shí)隊(duì)列的實(shí)現(xiàn)方法(面試官也得服)

    這篇文章主要介紹了一口氣說出Java 6種延時(shí)隊(duì)列的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 調(diào)用java.lang.Runtime.exec的正確姿勢(shì)分享

    調(diào)用java.lang.Runtime.exec的正確姿勢(shì)分享

    這篇文章主要介紹了調(diào)用java.lang.Runtime.exec的正確姿勢(shì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java 基于雪花算法生成分布式id

    Java 基于雪花算法生成分布式id

    SnowFlake 算法(雪花算法), 是Twitter開源的分布式id生成算法。其核心思想就是: 使用一個(gè)64 bit的long型的數(shù)字作為全局唯一id。本文講述Java 基于雪花算法生成分布式id的方法
    2021-06-06
  • 詳解Spring Cloud Stream使用延遲消息實(shí)現(xiàn)定時(shí)任務(wù)(RabbitMQ)

    詳解Spring Cloud Stream使用延遲消息實(shí)現(xiàn)定時(shí)任務(wù)(RabbitMQ)

    這篇文章主要介紹了詳解Spring Cloud Stream使用延遲消息實(shí)現(xiàn)定時(shí)任務(wù)(RabbitMQ),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • java selenium教程環(huán)境搭建方法

    java selenium教程環(huán)境搭建方法

    本文主要介紹java selenium 環(huán)境搭建,這里詳細(xì)介紹了selenium的安裝環(huán)境搭建,有興趣的小伙伴可以參考下
    2016-08-08
  • SpringCloud中分析講解Feign組件添加請(qǐng)求頭有哪些坑梳理

    SpringCloud中分析講解Feign組件添加請(qǐng)求頭有哪些坑梳理

    在spring?cloud的項(xiàng)目中用到了feign組件,簡(jiǎn)單配置過后即可完成請(qǐng)求的調(diào)用。又因?yàn)橛邢蛘?qǐng)求添加Header頭的需求,查閱了官方示例后,就覺得很簡(jiǎn)單,然后一頓操作之后調(diào)試報(bào)錯(cuò)...下面我們來詳細(xì)了解
    2022-06-06
  • Java檢查字符串是否一致的四種方法

    Java檢查字符串是否一致的四種方法

    字符串比較是常見的操作,包括比較相等、比較大小、比較前綴和后綴串等,在 Java 中,比較字符串的常用方法有四個(gè):equals(),equalsIgnoreCase(),compareTo()和compareToIgnoreCase(),下面詳細(xì)介紹這四個(gè)方法的使用
    2024-04-04
  • Spring 環(huán)境下實(shí)現(xiàn)策略模式的示例

    Spring 環(huán)境下實(shí)現(xiàn)策略模式的示例

    這篇文章主要介紹了Spring 環(huán)境下實(shí)現(xiàn)策略模式的示例,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下
    2020-10-10
  • 總結(jié)Junit4,Junit5,Jupiter之間的聯(lián)系

    總結(jié)Junit4,Junit5,Jupiter之間的聯(lián)系

    Jupiter和Junit5之間有什么聯(lián)系?Jupiter提供了哪些新的測(cè)試方法?如何用IDEA和Jupiter生成可讀性更好的測(cè)試報(bào)告?文中有非常詳細(xì)的說明,需要的朋友可以參考下
    2021-06-06
  • SpringBoot+WebSocket實(shí)現(xiàn)即時(shí)通訊功能(Spring方式)

    SpringBoot+WebSocket實(shí)現(xiàn)即時(shí)通訊功能(Spring方式)

    今天給大家分享一個(gè)SpringBoot+WebSocket實(shí)現(xiàn)即時(shí)通訊功能(Spring方式),WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,文章通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10

最新評(píng)論

邹城市| 罗源县| 绿春县| 钟祥市| 利津县| 德令哈市| 浪卡子县| 衡水市| 德昌县| 景宁| 瓦房店市| 云和县| 上杭县| 平原县| 永登县| 吉隆县| 安龙县| 松潘县| 宣汉县| 六枝特区| 延安市| 黔东| 金昌市| 嘉荫县| 玉屏| 通海县| 辽宁省| 洞头县| 北京市| 秦安县| 巨野县| 澳门| 平谷区| 彭阳县| 永寿县| 宜良县| 濉溪县| 紫云| 长治县| 即墨市| 新河县|