编写:HorinJsor
文章目录
前言
在SpringCloud(一)中,使用的是Template方式【远程调用】与【负载均衡】。
Template存在下面的问题(如上图):
1、代码可读性差,编程体验不统一;
2、参数复杂URL难以维护。
Feign的作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。
提示:以下是本篇文章正文内容,下面案例可供参考
一、Feign是什么?
Feign是一个声明式(使用注解的方式)的http客户端,他的集成了ribbon,在第二点操作步骤完成后自带【负载均衡】。
二、Feign操作步骤
1.引入依赖:在pom文件中引入Feign依赖(或者在创建项目时选择OpenFeign依赖)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.开启Feign功能:在消费者(服务调用项目)的启动类添加注解开启Feign的功能
3.编写Feign客户端:创建一个接口类,编写需要的方法
1.重新创建一个Feign包,新建一个接口类。
2.复制生产者中需要调用服务的方法签名:除了{}外,其他均要复制。传参一定要有注解。
@FeignClient("userservice")//服务名
public interface UserClient {
@GetMapping("/user/{id}") //路径,传参使用地址栏方式。
User findById(@PathVariable("id") Long id);
}
注意必要信息:
主要是基于SpringMVC的注解来声明远程调用的信息,比如:
·服务名称:userservice
·请求方式:GET
·请求路径:/user/{id}
·请求参数:Long id
·返回值类型:User
4.用Feign客户端代替RestTemplate
三、Hystrix熔断器:防止服务雪崩(调用失效的解决方案)
Hystrix必须配合Feign使用!!!
1.创建Hystrix类
思路:
1、在Feign包创建一个Hystrix包;
2、里面创建xxxServiceHystrix类;
3、实现2.3中的需要熔断的Feign客户端接口;
4、实现的方法里面写调用失败后的返回内容。
@Component
public class OrderServiceHystrix implements OrderServiceFeign {
@Override
public String doOrder() {
System.out.println("调用下单服务失败,开始走 hystrix");
return "我是 hystrix 的 doOrder,说明下单失败了";
}
......省略其他的熔断器实现方法
}
2.配置文件开启Hystrix熔断器
feign:
hystrix:
enabled: true
*四、Feign的自定义配置
重点针对日志。
开启自定义配置方式一:使用配置文件
日志全局生效:
feign:
client:
config:
default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
loggerLevel: FULL # 日志级别
日志局部生效:
feign:
client:
config:
userservice: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
loggerLevel: FULL # 日志级别
开启自定义配置方式二:Java类
1、创建一个配置类:
public class FeignClientConfiguration {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC;
}
}
2、注解中声明:
如果是全局配置,放到启动类的如下注解内:
@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
局部配置,在【2.3Feign客户端类】的注解内:
@FeignClient(value = "userservice", configuration = FeignClientConfiguration.class)
远程调用超时设置
Feign底层是ribbon,此方法可以设置调用等待时常,默认是1s。
ribbon: #feign 默认调用 1s 超时
ReadTimeout: 5000 #修改调用时长为 5s
ConnectTimeout: 5000 #修改连接时长为 5s
*五、Feign的性能优化
Feign默认采用URLConnection,不支持连接池。
建议采用Apache HttpClient ,支持连接池。
【Feign添加HttpClient的支持】操作步骤:
1.引入依赖
<!--httpClient的依赖 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
2.在yaml中配置
feign:
client:
config:
default: # default全局的配置
loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
httpclient:
enabled: true # 开启feign对HttpClient的支持
max-connections: 200 # 最大的连接数
max-connections-per-route: 50 # 每个路径的最大连接数
*六、如何导入其它model项目
1.在pom导入依赖。
2.如果未注入bean,启动类注解声明:
@EnableFeignClients(basePackages = "cn.itcast.feign.clients")
总结
比较适用的微服务架构
冲。