Spring Cloud Feign 优雅的服务调用
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 {}
写服务接口
- 在项目中创建一个文件夹用来管理Fegin的所有接口
- 可以按照服务提供者的名字进行二级分类
- 创建一个接口。这里我根据服务提供者的名称创建了一个 UserServiceFeignClient 的接口
- 接口上添加注解 @FeignClient("SERVICE-PROVIDER"),注解的默认值填写服务提供者的名字
- 复制提供者的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的执行原理
- 在Spring容器启动时,扫描到 @EnableFeignClients 注解。而该注解又导入了 FeignClientsRegistrar.class 这个类。该类定义了扫描所有添加 @FeignClient 注解的接口
- FeignClientsRegistrar 实现了 Spring ImportBeanDefinitionRegistrar 类,用来导入自定义Bean。其中该方法主要用来导入Bean.
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
this.registerDefaultConfiguration(metadata, registry); // 注册配置
this.registerFeignClients(metadata, registry);// 注册Feign客户端
}
- 之后通过 registerFeignClient 方法,以动态代理的形式生成接口的实现。让我们得以调用
Spring Cloud Feign 优雅的服务调用的更多相关文章
- Spring Cloud Feign 声明式服务调用
目录 一.Feign是什么? 二.Feign的快速搭建 三.Feign的几种姿态 参数绑定 继承特性 四.其他配置 Ribbon 配置 Hystrix 配置 一.Feign是什么? 通过对前面Sp ...
- 笔记:Spring Cloud Feign 声明式服务调用
在实际开发中,对于服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以我们通常会针对各个微服务自行封装一些客户端类来包装这些依赖服务的调用,Spring Cloud Feign 在此基础上做了进 ...
- Spring Cloud Feign声明式服务调用(转载)+遇到的问题
转载:原文 总结: 1.pom添加依赖 2.application中填写正确的eureka配置 3.启动项中增加注解 @EnableFeignClients 4.填写正确的调用接口 通过原文使用Fei ...
- 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnection.Ap ...
- spring Cloud Feign作为HTTP客户端调用远程HTTP服务
在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnection.Ap ...
- Spring Cloud 2-Feign 声明式服务调用(三)
Spring Cloud Feign 1. pom.xml 2. application.yml 3. Application.java 4. Client.java 简化RestTemplate调 ...
- 使用Spring Cloud Feign
使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务 在spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就 ...
- spring cloud深入学习(三)-----服务消费
在上一篇博文中简单实现了eureka-server以及eureka-provider,后面会实现eureka-cosumer,现在针对eureka做进一步的详解. 微服务整体架构 文字再美也没有图片直 ...
- Spring Cloud 入门教程(二): 服务消费者(rest+ribbon)
在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...
随机推荐
- 使用mui框架开发App,当input获取焦点时,键盘弹出,底部导航栏上升。
转自 https://blog.csdn.net/elementFei/article/details/72917393 感谢 问题: 使用mui框架开发App,当input获取焦点时,键盘弹出,底部 ...
- web接口测试中需要注意的点
1.接口返回 数据格式是否和预期一致.例如:要求返回json格式的数据,json数据的key命名是否正确,对应的value是否与数据库一致. 需要转换的数据是否正确转换,例如时间戳是否按正确转换为时间 ...
- [LC] 112. Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- 59)PHP,管理员表中所存在的项
用户ID 用户名 用户密码 用户权限(就是他的角色等级,比如是1级 2级, 三级等等) 上次登录的IP 上次登录的时间
- 公式化学习requests(第二卷)
请求浏览器分为两种一种是不需要用户登录验证直接请求 另一种是需要用户登陆验证请求,现在说一下利用COOKIE实现,COOKIE在前端开发时有很多的作用,要熟练使用, 直接上代码了: 第一步:访问页面, ...
- 接口测试-chap4-关联接口测试
关联接口测试指:请求第2个接口之前必须先请求第一个接口 1.请求第2个接口时需要带着第一个请求返回的cookie 2.如果不使用cookie,如何进行关联接口测试:使用session保持连接.可以代替 ...
- 了解DocumentFragment 给我们带来的性能优化
首先我们需要了解 DocumentFragment 是什么? w3c 上面的详细解释:link here 我把关键点写下来了: DocumentFragment 节点不属于文档树,继承的 parent ...
- unittest(9)- 使用ddt给测试用例传参
# 1. http_request.py import requests class HttpRequest: def http_request(self, url, method, data=Non ...
- 关于安装MongoDB4.0.9启动服务时显示connect failed错误的解决
1.在安装完MongoDB4.0.9后在其/bin目录下打开CMD输入mongo测试服务是否开启,结果显示connect failed错误 解决方法: 出现这个错误的主要原因时因为在我们计算机的服务里 ...
- Python测试开发-浅谈如何自动化生成测试脚本
Python测试开发-浅谈如何自动化生成测试脚本 原创: fin 测试开发社区 前天 阅读文本大概需要 6.66 分钟. 一 .接口列表展示,并选择 在右边,点击选择要关联的接口,区分是否要登录, ...