<tbody id="86a2i"></tbody>


<dd id="86a2i"></dd>
<progress id="86a2i"><track id="86a2i"></track></progress>

<dd id="86a2i"></dd>
<em id="86a2i"><ruby id="86a2i"><u id="86a2i"></u></ruby></em>

    <dd id="86a2i"></dd>

    Feign遠程調用

    1.1、Feign概述

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

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

    創建接口,為接口添加注解,即可使用Feign。

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

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

    1.2、Feign替代RestTemplate

    先來看我們以前利用RestTemplate發起遠程調用的代碼

    SpringCloud?Feign遠程調用與自定義配置詳解

    存在下面的問題:

    ?代碼可讀性差,編程體驗不統一

    ?參數復雜URL難以維護

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

    其作用就是幫助我們優雅的實現http請求的發送,解決上面提到的問題。

    SpringCloud?Feign遠程調用與自定義配置詳解

    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  //服務發現
    @EnableFeignClients  //開啟遠程調用
    public class TestNacosConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(TestNacosConsumerApplication.class, args );
        }
    }

    SpringCloud?Feign遠程調用與自定義配置詳解

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

    消費服務調用提供服務

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

    service-consumer服務:

    編寫Controller層調用Feign:

    @RestController
    @RequestMapping("/feign")
    public class TestFeignController {
        @Resource
        private EchoFeign echoFeign;
        @GetMapping("/echo")
        public String echo(){
            //調用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層提供被調用:

    @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 測試

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

    SpringCloud?Feign遠程調用與自定義配置詳解

    SpringCloud?Feign遠程調用與自定義配置詳解

    1.2.5 總結

    使用Feign的步驟:

    ① 引入依賴

    ② 添加@EnableFeignClients注解

    ③ 編寫FeignClient接口

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

    1.3、自定義配置

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

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

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

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

    1.3.1 方式一配置文件方式

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

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

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

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

    而日志的級別分為四種:

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

    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)

    總結:

    Feign的日志配置:

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

    ① 如果 xxx 是 default 則代表全局

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

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

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

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

    原文地址:https://blog.csdn.net/m0_64550837/article/details/127873881

    相關文章:

    免费一级a片在线播放视频|亚洲娇小性XXXX色|曰本无码毛片道毛片视频清|亚洲一级a片视频免费观看
    <tbody id="86a2i"></tbody>

    
    
    <dd id="86a2i"></dd>
    <progress id="86a2i"><track id="86a2i"></track></progress>

    <dd id="86a2i"></dd>
    <em id="86a2i"><ruby id="86a2i"><u id="86a2i"></u></ruby></em>

      <dd id="86a2i"></dd>