fegin是什么以及作用
fegin是一套http调用的轻量级框架,目前被广泛适用于微服务解决方案,其作用是在微服务之间通过注解的方式作用http调用,可以将参数转换成http报文。
fegin如何做到使用注解完成http调用
其核心原理是通过动态代理将注解下的方法生成一个代理类,并通过fegin定义的默认协议将方法转换成一个RequestTemplate类型。
fegin工作流程
1、主程序中通过注解@EnableFeginClients开启fegin注解,在接口上使用@FeginClients注解。
2、程序启动通过包扫描,查找所有使用@FeginClients的方法将其注入到Spring IOC 容器中,然后动态生成RequestTemplate对象,该对象封装可HTTP请求需要的全部信息,如请求参数名,请求方法等信息都是在这个过程中确定的。
3、通过RequestTemplate对象生成request,将request发送给Clients,这里的Clients指的是 JDK中的HttpUrlConnect、OKHttp等,最后将Client封装到LoadBlanceClient类中,使用了Ribbon负载均衡发起调用。
fegin的日志以及重试机制
fegin中还包含了自定义的日志等级
public abstract class Logger {
/**
* Controls the level of logging.
*/
public enum Level {
/**
* No logging.
*/
NONE,
/**
* Log only the request method and URL and the response status code and execution time.
*/
BASIC,
/**
* Log the basic information along with request and response headers.
*/
HEADERS,
/**
* Log the headers, body, and metadata for both requests and responses.
*/
FULL
}
}
还有一套基于重试器的重试机制,当HTTP请求出现IO异常时,Feign会有一个最大尝试次数发送请求。