1.Feign
1.1简介
为什么叫伪装?
Feign可以把Rest的请求进行隐藏伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做
1.2快速入门
1.2.1导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1.2.2Feign的客户端
@FeignClient("service")
public interface UserClient {
@GetMapping("user/{id}")
Items queryById(@PathVariable("id") Integer id);
}
-
首先这是一个接口,Feign会通过动态代理,帮我们生成实现类,这点跟mybatis的mapper很像
-
@FeignClient,声明这是一个Feign客户端,同时通过value属性指定服务名称
-
接口中的方法,完全采用SpringMVC的注解Feign会根据注解帮我们为您生成URL,并访问获取结果改造原来的调用逻辑,使用UserClient访问:
@RestController @RequestMapping(value = "/consumer", produces = MediaType.APPLICATION_JSON_VALUE) public class ConsumerController { @Autowired private UserClient userClient; @GetMapping("/{id}") public User queryById(@PathVariable("id") Integer id){ return userClient.queryById(id); } }
1.2.3开启Feign功能
我们在启动类上,添加注解,开启Feign功能
@SpringCloudApplication
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
Feign中已经自动集成了Ribbon负载均衡,因此我们不需要自己定义RestTemplate了
1.2.4启动测试:
访问接口:
1.3Hystix支持
Feign默认也有对Hysix的集成:只不过,默认情况下是关闭的,我们需要通过下面的参数来开启:
feign:
hystrix:
enabled: true
但是,Feign中的Fallback配置不像Ribbon中那样简单了
1)首先,我们要定义一个类,实现刚才编写的UserClient,作为fallback的处理类
@Component
public class UserClientImpl implements UserClient {
@Override
public User queryById(Integer id) {
User user = new Items();
user.setName("未知用户");
return user;
}
}
2)然后在UserClient中,指定刚才编写的实现类
@FeignClient(value = "service",fallback = UserClientImpl.class)
public interface UserClient {
@GetMapping("user/{id}")
Items queryById(@PathVariable("id") Integer id);
}
3)重启测试:
我们关闭service服务,然后在页面访问:
1.4请求压缩
Spring Cloud Feign支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的参数即可开启请求与响应的压缩功能:
feign:
compression:
request:
enabled: true #开启请求压缩
response:
enabled: true #开启响应压缩
同时,我们也可以对请求的数据类型,以及出发压缩的大小下限进行设置:
feign:
compression:
request:
enabled: true #开启请求压缩
mime-types: text/html,application/html,application.json #设置压缩的数据类型
min-request-size: 2048 #设置出发压缩的大小下限
注:上面的数据类型·压缩大小下限均为默认值
1.5日志级别
通过logging.level.xx=debug来设置日志级别。然而这个对Feign客户端而言不会产生效果。因为@FeignClient注解修改的客户端被代理时,都会创建一个心得Feigin.Logger实例。我们需要额外指定这个日志的级别才可以。
1)设置cn.itcast包下的日志级别都为debug
logging:
level:
cn.itcast: debug
2)编写配置类,定义日志级别
@Configuration
public class FeignConfig {
Logger.Level feignLooggerLevel(){
return Logger.Level.FULL;
}
}
这里指定的Levelji’bie是FULL,Feign支持4种级别:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WEWIn2PW-1592560939047)(C:\Users\ZhouShu\Desktop\logger.png)]
Logger.Level feignLooggerLevel(){
return Logger.Level.FULL;
}
}
这里指定的Levelji'bie是FULL,Feign支持4种级别:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020061918063885.png#pic_center)
- NONE:不记录任何日志信息,这里是默认值