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

feign?打印日志不顯示的問(wèn)題及解決

 更新時(shí)間:2022年06月28日 11:05:16   作者:球場(chǎng)一枝花  
這篇文章主要介紹了feign?打印日志不顯示的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

feign打印日志不顯示

1.是否有設(shè)置 feign 的 Logger.Level

@Configuration
public class FeignClientConfig {
?? ?@Bean
?? ?Logger.Level feignLogLevel() {
?? ??? ?return Logger.Level.FULL;
?? ?}
}

2.查看是否有在 yml 或者 properties 文件中有設(shè)置 level

logging:
? level:
? ? cn.itcast.order: debug

3.如果上面兩項(xiàng)設(shè)置后還沒(méi)有正確日志輸出,那么請(qǐng)確定你是否開(kāi)啟了 log4j ,如果使用了,請(qǐng)?jiān)?logback.xml 文件中檢查是否添加了一下內(nèi)容

<!-- 這里是你得 feign 包-->
<logger name="com.business.gateway.iao" level="DEBUG" additivity="false">
?? ?<appender-ref ref="STDOUT"/>
</logger>

如果還沒(méi)有效果,那么恭喜你,中獎(jiǎng)了,只能通過(guò) log4j 底層源碼去 debug 了。一般前3步做完 日志都會(huì)正確出現(xiàn),最后請(qǐng)大家一定要去看官方文檔。

feign基本使用

在開(kāi)發(fā) Spring Cloud 微服務(wù)的時(shí)候,我們知道,服務(wù)之間都是以 HTTP 接口的形式對(duì)外提供服務(wù)的,因此消費(fèi)者在進(jìn)行調(diào)用的時(shí)候,底層就是通過(guò) HTTP Client 的這種方式進(jìn)行訪問(wèn)。

當(dāng)然我們可以使用JDK原生的 URLConnection、Apache 的 HTTP Client、Netty 異步 Http Client,Spring 的 RestTemplate 去實(shí)現(xiàn)服務(wù)間的調(diào)用。

但是最方便、最優(yōu)雅的方式是通過(guò) Spring Cloud Open Feign 進(jìn)行服務(wù)間的調(diào)用 Spring Cloud 對(duì) Feign 進(jìn)行了增強(qiáng),使 Feign 支持 Spring Mvc 的注解,并整合了 Ribbon 等,從而讓 Feign 的使用更加方便。

Feign 概述

什么是 Feign

Feign 是一個(gè)聲明式的 Web Service 客戶端。它的出現(xiàn)使開(kāi)發(fā) Web Service 客戶端變得很簡(jiǎn)單。使用 Feign 只需要?jiǎng)?chuàng)建一個(gè)接口加上對(duì)應(yīng)的注解,比如:@FeignClient 注解。 Feign 有可插拔的注解,包括 Feign 注解和 AX-RS 注解。Feign 也支持編碼器和解碼器,Spring Cloud Open Feign 對(duì) Feign 進(jìn)行增強(qiáng)支持 Spring Mvc 注解,可以像 Spring Web 一樣使用 HttpMessageConverters 等。

Feign 是一種聲明式、模板化的 HTTP 客戶端。在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 請(qǐng)求訪問(wèn)遠(yuǎn)程服務(wù),就像調(diào)用本地方法一樣的,開(kāi)發(fā)者完全感知不到這是在調(diào)用遠(yuǎn)程方法,更感知不到在訪問(wèn) HTTP 請(qǐng)求。接下來(lái)介紹一下 Feign 的特性,具體如下:

  • 可插拔的注解支持,包括 Feign 注解和AX-RS注解。
  • 支持可插拔的 HTTP 編碼器和解碼器。
  • 支持 Hystrix 和它的 Fallback。
  • 支持 Ribbon 的負(fù)載均衡。
  • 支持 HTTP 請(qǐng)求和響應(yīng)的壓縮。Feign 是一個(gè)聲明式的 WebService 客戶端,它的目的就是讓 Web Service 調(diào)用更加簡(jiǎn)單。它整合了 Ribbon 和 Hystrix,從而不需要開(kāi)發(fā)者針對(duì) Feign 對(duì)其進(jìn)行整合。Feign 還提供了 HTTP 請(qǐng)求的模板,通過(guò)編寫簡(jiǎn)單的接口和注解,就可以定義好 HTTP 請(qǐng)求的參數(shù)、格式、地址等信息。Feign 會(huì)完全代理 HTTP 的請(qǐng)求,在使用過(guò)程中我們只需要依賴注入 Bean,然后調(diào)用對(duì)應(yīng)的方法傳遞參數(shù)即可。

Feign 入門案例

此處以調(diào)用 Github API 查詢服務(wù)為例。

引入依賴

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

啟動(dòng)類加入如下注解:

/** 開(kāi)啟 Feign 掃描支持 */
@EnableFeignClients?

Feign 接口編寫

/**
?* @Author:大漠知秋
?* @Description:使用 Feign 訪問(wèn) Github 查詢 API
?* @CreateDate:2:36 PM 2018/10/24
?*/
@FeignClient(name = "github-client", url = "https://api.github.com")
public interface GitHubFeign {

????@RequestMapping(
????????????value = "/search/repositories",
????????????method = RequestMethod.GET,
????????????produces = MediaType.APPLICATION_JSON_UTF8_VALUE
????)
????String searchRepo(@RequestParam("q") String q);
}

Controller

/**
?* @Author:大漠知秋
?* @Description:使用 Feign 訪問(wèn) Github 查詢 API
?* @CreateDate:2:42 PM 2018/10/24
?*/
@RestController
@RequestMapping(
? ? ? ? value = "/github",
? ? ? ? produces = MediaType.APPLICATION_JSON_UTF8_VALUE
)
public class GitHubController {

? ? @Resource
? ? private GitHubFeign gitHubFeign;

? ? @RequestMapping(
? ? ? ? ? ? value = "/search/repositories",
? ? ? ? ? ? method = RequestMethod.GET
? ? )
? ? String searchRepo(@RequestParam("q") String q) {
? ? ? ? return gitHubFeign.searchRepo(q);
? ? }
}

結(jié)果

Feign 工作原理

在開(kāi)發(fā)微服務(wù)應(yīng)用時(shí),我們會(huì)在主程序入口添加 @EnableFeignClients 注解開(kāi)啟對(duì) Feign Client 掃描加載處理。根據(jù) Feign Client 的開(kāi)發(fā)規(guī)范,定義接口并加 @FeignClients 注解。

當(dāng)程序啟動(dòng)時(shí),會(huì)進(jìn)行包掃描,掃描所有 @FeignClients 的注解的類,并將這些信息注入 Spring IOC 容器中。當(dāng)定義的 Feign 接口中的方法被調(diào)用時(shí),通過(guò)JDK的代理的方式,來(lái)生成具體的 RequestTemplate。當(dāng)生成代理時(shí),F(xiàn)eign 會(huì)為每個(gè)接口方法創(chuàng)建一個(gè) RequetTemplate 對(duì)象,該對(duì)象封裝了 HTTP 請(qǐng)求需要的全部信息,如請(qǐng)求參數(shù)名、請(qǐng)求方法等信息都是在這個(gè)過(guò)程中確定的。

然后由 RequestTemplate 生成 Request,然后把 Request 交給 Client 去處理,這里指的 Client 可以是 JDK 原生的 URLConnection、Apache 的 Http Client 也可以是 Okhttp。最后 Client 被封裝到 LoadBalanceclient 類,這個(gè)類結(jié)合 Ribbon 負(fù)載均衡發(fā)起服務(wù)之間的調(diào)用。

@FeignClient 注解

  • name:指定 Feign Client 的名稱,如果項(xiàng)目使用了 Ribbon,name 屬性會(huì)作為微服務(wù)的名稱,用于服務(wù)發(fā)現(xiàn)。
  • url:url 一般用于調(diào)試,可以手動(dòng)指定 @FeignClient 調(diào)用的地址。
  • decode404:當(dāng)發(fā)生404錯(cuò)誤時(shí),如果該字段為 true,會(huì)調(diào)用 decoder 進(jìn)行解碼,否則拋出 FeignException。
  • configuration:Feign 配置類,可以自定義 Feign 的 Encoder、Decoder、LogLevel、Contract。
  • fallback:定義容錯(cuò)的處理類,當(dāng)調(diào)用遠(yuǎn)程接口失敗或超時(shí)時(shí),會(huì)調(diào)用對(duì)應(yīng)接口的容錯(cuò)邏輯,fallback 指定的類必須實(shí)現(xiàn) @FeignClient 標(biāo)記的接口。
  • fallbackFactory:工廠類,用于生成 fallback 類示例,通過(guò)這個(gè)屬性我們可以實(shí)現(xiàn)每個(gè)接口通用的容錯(cuò)邏輯,減少重復(fù)的代碼。
  • path:定義當(dāng)前 FeignClient 的統(tǒng)一前綴。

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

相關(guān)文章

最新評(píng)論