目录
  1. 1. Feign介绍
  2. 2. 实践
SpringCloud架构--服务调用及Feign介绍和使用(第三篇)

Feign介绍

Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便。
它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、Spring Cloud增加了对Spring MVC注释的支持,并HttpMessageConverters在Spring Web中使用了默认使用的相同方式。Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。

实践

  1. 续上一篇,启动注册中心eureka-server 端口8761、一个客户端应用2个实例,端口为8762和8763

  2. 创建feign

    新建springboot应用,导入相关pom依赖,如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>

    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    </dependencies>

    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies>
    </dependencyManagement>

    修改yml文件,将应用注册到eureka中,如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    spring:
    application:
    name: service-feign
    server:
    port: 8765
    eureka:
    client:
    service-url:
    defaultZone: http://localhost:8761/eureka/

    在启动类上,增加feign客户端注解,开启feign功能:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @EnableEurekaClient
    @SpringBootApplication
    @EnableFeignClients
    public class SericefeignApplication {

    public static void main(String[] args) {
    SpringApplication.run(SericefeignApplication.class, args);
    }
    }

    定义一个service接口,指定调用具体服务、具体接口:

    1
    2
    3
    4
    5
    @FeignClient(value = "DemoApp")
    public interface ServiceSayHi {
    @RequestMapping(value = "/sayHi",method = RequestMethod.GET)
    String sayHiFromClient(@RequestParam(value = "name") String name);
    }

    其中DemoApp表示需要调用的应用服务,该应用服务已注册到注册中心,sayHi是需要调用的接口

    编写Controller进行调用测试:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @RestController
    public class HiController {
    @Autowired
    private ServiceSayHi serviceSayHi;
    @RequestMapping("/sayHi")
    public String sayHi(@RequestParam String name){
    return serviceSayHi.sayHiFromClient(name);
    }

    }

    访问http://localhost:8764/sayHi?name=张三
    结果为:

    再次刷新,结果为:

    多次刷新,发现,端口号在8762和8763之间不断交替变化,说明feign发挥了作用。

文章作者: 李浩
文章链接: https://leehoward.cn/2019/10/18/SpringCloud架构--服务调用及Feign介绍和使用(第三篇)/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 leehoward
打赏
  • 微信
  • 支付宝

评论