SringCloud Feign使用
程序员文章站
2022-07-12 23:22:22
...
目录
Feign简介
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求,这整个调用过程和Dubbo的RPC非常类似。开发起来非常的优雅。
Feign 的简单使用
- 配置依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
2.入口程序上增加@EnableFeignClients注解
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class MicroserviceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(MicroserviceConsumerApplication.class, args);
}
}
3.编写接口
- 首先贴出服务端的代码
- 在消费端映射的接口代码
// microservice-provider:映射的微服务的虚拟的地址
@FeignClient("microservice-provider")
public interface UserFeignClient {
@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
public User findById(@PathVariable("id") Long id);
// 有两个坑:
//1. @GetMapping不支持,必须直接写出提交的方式是get还是post的
//2. @PathVariable得设置value
//只要参数是复杂对象,即使指定了是GET方法,feign依然会以POST方法进行发送请求。如下
//成功
@RequestMapping(value = "/user", method = RequestMethod.POST)
public User postUser(@RequestBody User user);
//失败
// @RequestMapping(value = "/get-user", method = RequestMethod.GET)
// public User getUser(User user);
//}
- 使用该接口
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("/movief/{id}")
public User findByFeginId(@PathVariable Long id) {
return userFeignClient.findById(id);
}
Feign 的进阶使用
为feign添加配置文件
1.feign的默认配置(摘录自官网文档)
- 所以在配置文件中可修改的项就有编码,解码方式,日志级别,使用的容器,等
- Contract(feign容器)配置的是SpringMvc容器,所以在之前的使用中,我们使用的是springmvc的注解@RequestMapping
2.添加配置文件
- 添加@ExcludeFromComponentScan注解的目的同上一期Ribbon中的目的一致,如果该文件放在主程序的文件目录及子目录下时,spring扫描后会将该策略设置为所有的feign接口使用,所以我们要避免该文件被spring扫描到。
- 配置文件可配的项有
@Configuration
@ExcludeFromComponentScan
public class FeignConfiguration1 {
//这里我们改为了feign的原生容器,则在接口中就不能使用springmvc的注解,要使用feign的原生注解
@Bean
public Contract feignContract() {
return new Contract.Default();
}
//配置fegin的日志级别,要使得日志生效,还得再application.yml中添加配置,见下方feign的日志使用
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
3.修改接口文件
@FeignClient(name = "microservice-provider", configuration = FeignConfiguration1.class)
public interface UserFeignClient {
//由于FeignConfiguration1中使用原生的容器,这里要使用原生feign注解
//@RequestLine(请求方式+" "+请求路径)
//参数必须加上@Param注解
@RequestLine("GET /simple/{id}")
public User findById(@Param("id") Long id);
}
为feign添加日志监控
1.首先在application.yml添加如下配置
logging:
level:
com.spongebob.cloud.microserviceconsumer.fegin: DEBUG
2.其次在FeignConfiguration1 文件中添加日志要监控的级别,如上全部监控。
Feign 加入Ribbon 负载均衡
1.Feign 内嵌入了Ribbon 的依赖,不需要再引入依赖
2.在application.xml配置文件中添加如下配置
microservice-provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #采用轮询
Feign支持请求和响应的压缩
- 增加gzip配置
#请求和响应GZIP压缩支持
feign.compression.request.enabled=true
feign.compression.response.enabled=true
推荐阅读
-
HBase 系列(六)——HBase Java API 的基本使用
-
创建基于ASP.NET core 3.1 的RazorPagesMovie项目(一)-创建和使用默认的模板
-
FineReport的概念和使用讲解
-
flask与Flask-CORS的使用
-
卢伟冰:2020年Redmi要做5G先锋 普及5G使用
-
使用NuGet将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理
-
使用Spring Boot和AspectJ实现方法跟踪基础结构
-
Python爬虫使用selenium爬取qq群的成员信息(全自动实现自动登陆)
-
php foreach循环中使用引用的问题
-
Hive安装、配置和使用