Spring Cloud 学习 - Nacos服务发现之Feign方式调用
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命令行调用结果:
因个人能力有限,文中如有不足或错误之处,欢迎指正,感谢~~
还没有评论,来说两句吧...