Fegin 是由NetFlix开发的声明式、模板化HTTP客户端,可用于SpringCloud 的服务调用。提供了一套更优雅、便捷的HTTP调用API,并且SpringCloud整合了Fegin、Eureka和Ribbon。使其使用更加简便。替换了之前使用RestTemplate进行硬编码方式的服务调用。

Feign组件入门

导入依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

开启服务

在启动类上添加 @EnableFeignClients 开启

@SpringBootApplication
@EnableFeignClients
public class ServiceConsumerApplication {}

写服务接口

  1. 在项目中创建一个文件夹用来管理Fegin的所有接口
  2. 可以按照服务提供者的名字进行二级分类
  3. 创建一个接口。这里我根据服务提供者的名称创建了一个 UserServiceFeignClient 的接口
  4. 接口上添加注解 @FeignClient("SERVICE-PROVIDER"),注解的默认值填写服务提供者的名字
  5. 复制提供者的Controller方法,注意不要遗漏类名上的地址
package cn.keats.service_consumer.feign;

import cn.keats.service_consumer.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import java.util.List; /**
* @Author: keats_coder
* @Date: 2020/3/7
* @Version 1.0
*/
@FeignClient("SERVICE-PROVIDER")
public interface UserServiceFeignClient { @GetMapping("/api/v1/user/{age}")
User getUser(@PathVariable("age") Integer age); /**
* 用户列表
* @return
*/
@GetMapping("/api/v1/users")
List<User> getUsers();
}

调用

在需要调用服务的地方使用 @AutoWired 注入该接口。调用其对应的方法

@Autowired
private UserServiceFeignClient userServiceFeignClient; /**
* 基于 Feign 的优雅的接口调用方式
*/
@GetMapping("teacher/user/{age}")
public User getAllUser(@PathVariable Integer age){
return userServiceFeignClient.getUser(age);
}

Feign负载均衡

Feign中已经集成了Ribbon的负载均衡功能,默认情况下使用轮询的规则,若想要自定义可以参考:Ribbon进行服务调用/负载均衡以及请求重试配置

Feign的配置

新版本的Feign支持配置文件配置,常用的配置有日志级别的配置。开发环境下可以配置成最细腻级别的日志方便检查问题

# feign的配置
feign:
client:
config:
SERVICE-PROVIDER:
loggerLevel: FULL # NONE(默认选项), BASIC, HEADERS, FULL; 内容依次丰富、性能影响依次增大
logging:
level:
cn.keats.service_consumer.feign.UserServiceFeignClient: debug

Feign的执行原理

  1. 在Spring容器启动时,扫描到 @EnableFeignClients 注解。而该注解又导入了 FeignClientsRegistrar.class 这个类。该类定义了扫描所有添加 @FeignClient 注解的接口
  2. FeignClientsRegistrar 实现了 Spring ImportBeanDefinitionRegistrar 类,用来导入自定义Bean。其中该方法主要用来导入Bean.
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
this.registerDefaultConfiguration(metadata, registry); // 注册配置
this.registerFeignClients(metadata, registry);// 注册Feign客户端
}
  1. 之后通过 registerFeignClient 方法,以动态代理的形式生成接口的实现。让我们得以调用

Spring Cloud Feign 优雅的服务调用的更多相关文章

  1. Spring Cloud Feign 声明式服务调用

    目录 一.Feign是什么? 二.Feign的快速搭建 三.Feign的几种姿态 参数绑定 继承特性 四.其他配置 Ribbon 配置 Hystrix 配置 一.Feign是什么? ​ 通过对前面Sp ...

  2. 笔记:Spring Cloud Feign 声明式服务调用

    在实际开发中,对于服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以我们通常会针对各个微服务自行封装一些客户端类来包装这些依赖服务的调用,Spring Cloud Feign 在此基础上做了进 ...

  3. Spring Cloud Feign声明式服务调用(转载)+遇到的问题

    转载:原文 总结: 1.pom添加依赖 2.application中填写正确的eureka配置 3.启动项中增加注解 @EnableFeignClients 4.填写正确的调用接口 通过原文使用Fei ...

  4. 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务

    在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnection.Ap ...

  5. spring Cloud Feign作为HTTP客户端调用远程HTTP服务

    在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnection.Ap ...

  6. Spring Cloud 2-Feign 声明式服务调用(三)

    Spring Cloud Feign  1. pom.xml 2. application.yml 3. Application.java 4. Client.java 简化RestTemplate调 ...

  7. 使用Spring Cloud Feign

    使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务 在spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就 ...

  8. spring cloud深入学习(三)-----服务消费

    在上一篇博文中简单实现了eureka-server以及eureka-provider,后面会实现eureka-cosumer,现在针对eureka做进一步的详解. 微服务整体架构 文字再美也没有图片直 ...

  9. Spring Cloud 入门教程(二): 服务消费者(rest+ribbon)

    在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...

随机推荐

  1. 系统学习javaweb4----CSS层叠样式表(结束)

    摘要:这几天临近过年,事情有点多,学习总是段段续续的,今天总算完成了CSS的基本知识学习. 学习笔记: 西瓜学习javaweb 1.css简述. 1.1 css是什么?有什么作用? HTML----- ...

  2. 01-电子商城项目介绍及ssm框架搭建

    1.B2C电商项目功能及架构 1.1功能列表 1.2系统架构(soa架构) 2.后台管理系统工程搭建及测试 ypMall,ypMall-manager-web ypMall为父项目,管理子项目的jar ...

  3. bzoj1076 奖励关(概率dp)(状态压缩)

    BZOJ 1076 [SCOI2008]奖励关 Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须 ...

  4. php mb_substr()函数的详细解释!

    PHP substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr() /mb_strcut的用法 ...

  5. 单独安装jenkins-没有tomcat

    这里讲解war包的安装:windows的msi版安装很简单,双击即可,不用讲 1.官网下载 2. 3.把war包放到java目录下 4. 5.安装完成后打开:127.0.0.1:8080 输入密码后会 ...

  6. 吴裕雄--天生自然python学习笔记:python用 Selenium 组件实现浏览器操作自动化

    一般情况下,我们都是用手工操作的方式来对浏览器进行各种操作 . 实际上, 只要我们安装一个自动化操作组件, Python 就可以让我们的很多操作实现自动化 . Selenium 组件 在开发网页时,用 ...

  7. 在CMD中操作mysql数据库出现中文乱码解决方案

    百度了一下..有说将cmd字符编码用chcp命令改为65001(utf8字符编码),可这样之后根本无法输入中文,查询出的中问结果依旧乱码 其实,只要保证cmd客户端和MySQL两者编码一致即可. 但现 ...

  8. VSAN磁盘扩容与收缩(二)

  9. PP图|QQ图|正态性检验|K-S检验|S-W检验|

    应用统计学: 物理条件一致时,有理由认为方差是一致的.配对检验可排除物理影响,使方差变小,但是自由度降低了,即样本数变小.二项分布均值假设检验的模型要依据前面的假设条件: PP图统计图要看中间的贴近情 ...

  10. 微软推出精简版Windows10Lean系统意欲何为?

    提起Windows系统,自然无须多言都知道它的重要性.在经历了Windows Vista的失败. Windows 7的成功.Windows 8的平庸和Windows 10的复兴之后,微软算是积累下了大 ...