SpringCloudAlibaba集成Feign

1.Fegin是什么

  • Feign是Netflix开源的声明式HTTP客户端

1.为什么使用Fegin

1.1不使用Fegin
  • 代码可读性差
  • 复杂的url难以维护
1.2使用Fegin的好处
  • 使用Fegin简化了我们调用其他微服务的方式
  • 提高了代码的可读性
  • 对于url我们不需要去维护 我们只需要调接口

2.将Fegin集成到项目中

2.1.导入依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
2.2.启动类加入
@SpringBootApplication
@MapperScan("com.share.shareconter")
@EnableFeignClients
public class ShareConterApplication {

    public static void main(String[] args) {
        SpringApplication.run(ShareConterApplication.class, args);
    }

}
2.5.自定义Feign日志级别
  • None(默认值):不记录任何日志
  • BASIC:仅记录请求方法、URL、响应状态代码以及执行时间
  • HEADERS:记录BASIC级别的基础上,记录请求和响应的header
  • Full:记录请求和响应的header、body和元数据

2.5.1配置文件定义Feign的日志级别

feign:
  client:
  	config:
  		#指定微服务名称为 user-center 开启Feign开启日志
  		user-center:
  			loggerLevel: BASIC
2.6.Feign多参数传入

1.如果有多个 feginclient 中name一样的话 注意添加此配置

main:
  allow-bean-definition-overriding: true

2.GetMapping:传入多惨的设置

  • entity:参数面前加上 @SpringQueryMap
  • 变量: 参数面前加上 @@RequestParam

3.PostMapping:传入多惨的设置

  • entity:参数面前加上 @RequestBody
  • 变量: 参数面前加上 @@RequestParam
2.7.Feign性能优化

SpringCloudAlibaba集成Feign_第1张图片
1.为Feign添加连接池:Feign默认使用urlconntion去请求,没有使用连接池
2.Feign的日志级别不建议使用Full,建议使用BASIC
3.使用apache的httlclient 以及okhttp:这两个都支持连接池

4.为Feign添加HttpClient 连接池

4.1:添加依赖

<dependency>
	<groupId>io.github.openfeign</groupId>
	<artifactId>feign-httpclient</artifactId>
</dependency>

4.2:配置application.yml文件

fegin:
  httpclient:
  	#让Feign使用apache httlclient做请求,而不是默认的urlconttion
  	enabled: true
  	#Feign的最大连接数
  	max-connections: 200
  	#Feign单个路径的最大连接数
  	max-connections-per-route: 50
2.7.Feign在微服务中带上请求头去访问

创建拦截器 拦截请求 每次访问待着请求头去访问

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * 2 * @Author: ZhangShuai
 * 3 * @Date: 2020/6/24 10:19
 * 4 拦截request请求 每次去获得请求头
 */
@Component
public class AuthorizationInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String token = request.getHeader("token");
        String authorization = request.getHeader("Authorization");
        requestTemplate.header("token", token);
        requestTemplate.header("Authorization", authorization);
    }

}

你可能感兴趣的:(SpringCloudAlibaba集成Feign)