• 业余草 SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本)


    上一篇文章,讲述了如何通过RestTemplate+Ribbon去消费服务,这篇文章主要讲述如何通过Feign去消费服务。

    一、Feign简介

    Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

    简而言之:

    • Feign 采用的是基于接口的注解
    • Feign 整合了ribbon,具有负载均衡的能力
    • 整合了Hystrix,具有熔断的能力

    二、准备工作

    继续用上一节的工程, 启动eureka-server,端口为8761; 启动service-hi 两次,端口分别为8762 、8773.

    三、创建一个feign的服务

    新建一个spring-boot工程,取名为serice-feign,在它的pom文件引入Feign的起步依赖spring-cloud-starter-feign、Eureka的起步依赖spring-cloud-starter-netflix-eureka-client、Web的起步依赖spring-boot-starter-web,代码如下:

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4  
     5     <groupId>com.forezp</groupId>
     6     <artifactId>service-feign</artifactId>
     7     <version>0.0.1-SNAPSHOT</version>
     8     <packaging>jar</packaging>
     9  
    10     <name>service-feign</name>
    11     <description>Demo project for Spring Boot</description>
    12  
    13  
    14     <parent>
    15         <groupId>com.forezp</groupId>
    16         <artifactId>sc-f-chapter3</artifactId>
    17         <version>0.0.1-SNAPSHOT</version>
    18     </parent>
    19  
    20     <dependencies>
    21         <dependency>
    22             <groupId>org.springframework.cloud</groupId>
    23             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    24         </dependency>
    25         <dependency>
    26             <groupId>org.springframework.boot</groupId>
    27             <artifactId>spring-boot-starter-web</artifactId>
    28         </dependency>
    29         <dependency>
    30             <groupId>org.springframework.cloud</groupId>
    31             <artifactId>spring-cloud-starter-openfeign</artifactId>
    32         </dependency>
    33     </dependencies>
    34  
    35     </project>

    在工程的配置文件application.yml文件,指定程序名为service-feign,端口号为8765,服务注册地址为http://localhost:8761/eureka/ ,代码如下:

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

    在程序的启动类ServiceFeignApplication ,加上@EnableFeignClients注解开启Feign的功能:

     1 @SpringBootApplication
     2 @EnableEurekaClient
     3 @EnableDiscoveryClient
     4 @EnableFeignClients
     5 public class ServiceFeignApplication {
     6  
     7     public static void main(String[] args) {
     8         SpringApplication.run( ServiceFeignApplication.class, args );
     9     }
    10 }

    定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了service-hi服务的“/hi”接口,代码如下:

    1  
    2 @FeignClient(value = "service-hi")
    3 public interface SchedualServiceHi {
    4     @RequestMapping(value = "/hi",method = RequestMethod.GET)
    5     String sayHiFromClientOne(@RequestParam(value = "name") String name);
    6 }

    在Web层的controller层,对外暴露一个”/hi”的API接口,通过上面定义的Feign客户端SchedualServiceHi 来消费服务。代码如下:

     1 @RestController
     2 public class HiController {
     3  
     4  
     5     //编译器报错,无视。 因为这个Bean是在程序启动的时候注入的,编译器感知不到,所以报错。
     6     @Autowired
     7     SchedualServiceHi schedualServiceHi;
     8  
     9     @GetMapping(value = "/hi")
    10     public String sayHi(@RequestParam String name) {
    11         return schedualServiceHi.sayHiFromClientOne( name );
    12     }
    13 }

    启动程序,多次访问http://localhost:8765/hi?name=forezp,浏览器交替显示:

    hi forezp,i am from port:8762

    hi forezp,i am from port:8763

    Feign源码解析:http://blog.csdn.net/forezp/article/details/73480304

    本文源码下载: 
    https://github.com/forezp/SpringCloudLearning/tree/master/sc-f-chapter3

    五、参考资料

    本文参考了以下:

    http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html

    业余草微信公众号

    感谢您的关注!可加QQ1群:135430763,QQ2群:454796847,QQ3群:187424846。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

  • 相关阅读:
    概率的定义
    二项式分布与伯努利分布
    复数的表示方法
    <诗经>的由来
    王国维
    应该记住的历史事件
    switch条件变量的取值类型
    & 和 && 区别和联系,| 和 || 区别和联系
    成功安装 Visio 2016 和 Office 2016 的64位版本~~
    删除MicrosoftOffice2016的扫尾工作
  • 原文地址:https://www.cnblogs.com/panda2/p/9419018.html
Copyright © 2020-2023  润新知