Spring Cloud 學習 - Nacos服務發現之Feign方式調用
上一篇,我們介紹了 Spring Cloud 學習 - Nacos服務註冊與發現 ,使用了RestTemplate進行簡單調用,Ribbon作負載均衡。
RestTemplate調用看起來不夠優雅,這一篇,我們來看一下Feign優雅調用方式。
主要版本
本文使用的相關技術主要依賴版本如下:
Spring Cloud | Spring Cloud Alibaba | Spring Boot |
---|---|---|
Hoxton.SR3 | 2.2.0.RELEASE | 2.2.5.RELEASE |
好了,開始整合。
服務提供者,我們使用上一篇的
spring-cloud-alibaba-provider
服務,代碼不做修改。詳細請查看 Spring Cloud 學習 - Nacos服務註冊與發現 。
主要依賴
添加openfeign
和nacos-discovery
依賴,web
提供對外接口
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
添加配置
server:
port: 8080
spring:
application:
name: cloud-alibaba-feign-consumer
cloud:
nacos:
server-addr: localhost:8848
啓用註解
@EnableFeignClients
啓用FeignClient功能@EnableDiscoveryClient
開啓服務發現
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class AliFeignConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(AliFeignConsumerApplication.class, args);
}
}
編寫Client
@FeignClient("cloud-alibaba-provider")
,value爲調用的服務提供者名稱,即服務提供者的${spring.application.name}
的值。
這裏要特別注意下:FeignClient裏的@PathVariable("name")
裏的name
不能省略默認,否則會報異常。這一點和Controller裏不一致,Controller裏的可以省略默認。
@FeignClient("cloud-alibaba-provider")
public interface HelloFeignClient {
/**
* Hello, ${name}!
* @param name
* @return
*/
@GetMapping("/{name}")
String hello(@PathVariable("name") String name);
}
測試訪問
啓動Nacos
啓動服務註冊中心Nacos
啓動服務提供者
啓動2個服務提供者spring-cloud-alibaba-provider
,端口分別爲8081和8082:
多個啓動可以在控制檯指定端口進行啓動,也可以在IDEA中複製啓動配置,修改端口啓動。
命令行啓動方式如下:
java -jar yourapp.jar --server.port=8080
啓動服務消費者
啓動服務消費者spring-cloud-alibaba-feign-consumer
訪問測試
使用curl命令行調用結果:
因個人能力有限,文中如有不足或錯誤之處,歡迎指正,感謝~~