欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Feign遠程調(diào)用

1.1、Feign概述

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

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

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

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

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

1.2、Feign替代RestTemplate

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

存在下面的問題:

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

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

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

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

1.2.1 引入依賴

我們在order-service服務的pom文件中引入feign的依賴:

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

1.2.2 添加注解

在order-service的啟動類添加注解開啟Feign的功能:

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

1.2.3. 編寫Feign的消費服務提供服務

消費服務調(diào)用提供服務

消費服務Feign接口,用來請求提供服務

service-consumer服務:

編寫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服務:

編寫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服務,我是愛吃豆的土豆 " + ":" + serverPort;
    }

1.2.4 測試

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

1.2.5 總結(jié)

使用Feign的步驟:

① 引入依賴

② 添加@EnableFeignClients注解

③ 編寫FeignClient接口

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

1.3、自定義配置

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

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

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

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

1.3.1 方式一配置文件方式

基于配置文件修改feign的日志級別可以針對單個服務:局部生效

feign:  
  client:
    config: 
      userservice: # 針對某個微服務的配置
        loggerLevel: FULL #  日志級別 

也可以針對所有服務:全局生效

feign:  
  client:
    config: 
      default: # 這里用default就是全局配置,如果是寫服務名稱,則是針對某個微服務的配置
        loggerLevel: FULL #  日志級別 

而日志的級別分為四種:

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

1.3.2 方式二Java代碼方式

也可以基于Java代碼來修改日志級別,先聲明一個類,然后聲明一個Logger.Level的對象:

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

如果要**全局生效**,將其放到啟動類的@EnableFeignClients這個注解中:

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class) 

如果是**局部生效**,則把它放到對應的@FeignClient這個注解中:

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

總結(jié):

Feign的日志配置:

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

① 如果 xxx 是 default 則代表全局

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

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

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

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

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

相關文章

  • 在SpringBoot中無縫整合Dubbo的實現(xiàn)過程

    在SpringBoot中無縫整合Dubbo的實現(xiàn)過程

    微服務架構(gòu)已經(jīng)成為現(xiàn)代應用開發(fā)的熱門趨勢,而Dubbo作為一款強大的分布式服務框架,與Spring?Boot的結(jié)合是構(gòu)建高性能微服務應用的理想選擇,本文將詳細介紹如何在SpringBoot中無縫整合Dubbo,需要的朋友可以參考下
    2024-01-01
  • springboot mybatis調(diào)用多個數(shù)據(jù)源引發(fā)的錯誤問題

    springboot mybatis調(diào)用多個數(shù)據(jù)源引發(fā)的錯誤問題

    這篇文章主要介紹了springboot mybatis調(diào)用多個數(shù)據(jù)源引發(fā)的錯誤問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java開發(fā)SpringBoot參數(shù)校驗過程示例教程

    java開發(fā)SpringBoot參數(shù)校驗過程示例教程

    這篇文章主要為大家介紹了SpringBoot如何進行參數(shù)校驗的過程示例詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • 快速理解Java設計模式中的組合模式

    快速理解Java設計模式中的組合模式

    這篇文章主要介紹了快速理解Java設計模式中的組合模式,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Mybatis-Plus中update()和updateById()將字段更新為null

    Mybatis-Plus中update()和updateById()將字段更新為null

    本文主要介紹了Mybatis-Plus中update()和updateById()將字段更新為null,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • springboot整合druid連接池的步驟

    springboot整合druid連接池的步驟

    這篇文章主要介紹了springboot整合druid連接池的步驟,幫助大家更好的理解和學習springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • Java Spring的數(shù)據(jù)庫開發(fā)詳解

    Java Spring的數(shù)據(jù)庫開發(fā)詳解

    這篇文章主要介紹了Spring的數(shù)據(jù)庫開發(fā),主要圍繞SpringJDBC和Spring Jdbc Template兩個技術來講解,文中有詳細的代碼示例,需要的小伙伴可以參考一下
    2023-04-04
  • Springboot下載excel文件中文名亂碼問題及解決

    Springboot下載excel文件中文名亂碼問題及解決

    這篇文章主要介紹了Springboot下載excel文件中文名亂碼問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java檢測網(wǎng)絡是否正常通訊

    Java檢測網(wǎng)絡是否正常通訊

    在網(wǎng)絡應用程序中,檢測IP地址和端口是否通常是必要的,本文主要介紹了Java檢測網(wǎng)絡是否正常通訊,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Java詳細分析講解HashMap

    Java詳細分析講解HashMap

    在java開發(fā)中,HashMap是最常用、最常見的集合容器類之一,下面一起溫故一下,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論