概述:
• Feign 是一個(gè)聲明式的 REST 客戶端,它用了基于接口的注解方式,很方便實(shí)現(xiàn)客戶端配置。
• Feign 最初由 Netflix 公司提供,但不支持SpringMVC注解,后由 SpringCloud 對(duì)其封裝,支持了SpringMVC注
解,讓使用者更易于接受
首先在調(diào)用者的pom中加入如下坐標(biāo)
1
2
3
4
5
|
<!--feign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> |
然后在啟動(dòng)類上添加注解
@EnableFeignClients
以啟用Feign
最后創(chuàng)建一個(gè)接口,方法參數(shù)映射全部按照我們要調(diào)用的那個(gè)controller寫(xiě)一個(gè)
value
的值是應(yīng)用名稱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/** * * feign聲明式接口。發(fā)起遠(yuǎn)程調(diào)用的。 * String url = "http://eureka-provider/provider/getUser/"+id; User user = restTemplate.getForObject(url, User.class); * * 1. 定義接口 * 2. 接口上添加注解 @FeignClient,設(shè)置value屬性為 服務(wù)提供者的 應(yīng)用名稱 * 3. 編寫(xiě)調(diào)用接口,接口的聲明規(guī)則 和 提供方接口保持一致。 * 4. 注入該接口對(duì)象,調(diào)用接口方法完成遠(yuǎn)程調(diào)用 */ @FeignClient (value = "eureka-provider" ) @RequestMapping ( "/provider" ) public interface FeignProviderUserController { @GetMapping ( "/getUser/{id}" ) public ResponseEntity<User> getUser( @PathVariable ( "id" )String id); } |
然后我們將這個(gè)接口注入到我們要使用的地方,就可以直接調(diào)用那個(gè)方法了
1
2
3
4
5
6
7
8
9
10
11
|
/** * Feign形式的服務(wù)調(diào)用 * @param id * @return */ @GetMapping ( "/FeignClientGetUser/{id}" ) public ResponseEntity<User> FeignClientGetUser( @PathVariable ( "id" ) String id){ System.out.println( "進(jìn)入" ); ResponseEntity<User> user = feignConsumerUserClient.getUser(id); return user; } |
現(xiàn)在存在一個(gè)問(wèn)題,就是按照應(yīng)用名稱調(diào)用的時(shí)候。取到的對(duì)象name是正確的,但是url卻是http://+name,并不是我們想要的http://+host+port+uri,
正在解決…
結(jié)果:{好吧需要ribbon}
Feign超時(shí)配置
Feign 底層依賴于 Ribbon 實(shí)現(xiàn)負(fù)載均衡和遠(yuǎn)程調(diào)用。
• Ribbon默認(rèn)1秒超時(shí)。
• 超時(shí)配置:
在調(diào)用者的配置文件中加入
1
2
3
4
|
# 設(shè)置Ribbon的超時(shí)時(shí)間 ribbon: ConnectTimeout: 1000 # 連接超時(shí)時(shí)間 默認(rèn)1s 默認(rèn)單位毫秒 ReadTimeout: 3000 # 邏輯處理的超時(shí)時(shí)間 默認(rèn)1s 默認(rèn)單位毫秒 |
Feign日志記錄
1
2
|
logging: level: debug #配置日志級(jí)別 |
如果報(bào)錯(cuò)Failed to bind properties under 'logging.level'
,是因?yàn)閟pringboot2.0.0以后的版本只支持如下這種配置,需要指定名稱
1
2
3
|
logging: level: root: info #配置日志級(jí)別 |
到此這篇關(guān)于Spring Cloud-Feign服務(wù)調(diào)用的文章就介紹到這了,更多相關(guān)Spring Cloud-Feign服務(wù)調(diào)用內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/m0_49194578/article/details/120723184