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服务注册与发现

主要依赖

添加openfeignnacos-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命令行调用结果:
GiJBGD.md.png

因个人能力有限,文中如有不足或错误之处,欢迎指正,感谢~~

发布了63 篇原创文章 · 获赞 180 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/E09620126/article/details/105165788