OpenFeign - 介绍
springcloud出品,OpenFeign默认将Ribbon作为负载均衡器,直接内置了 Ribbon。在导入OpenFeign 依赖后无需专门导入Ribbon 依赖。
一、使用方法
1、引入openfeign:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2、在主程序类上添加注解 @EnableFeignClients:表示启用 Feign 客户端;
@SpringBootApplication @EnableFeignClients public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class,args); } }
3、定义用于调用服务提供者的 Feign 接口
@FeignClient("provider-instance-name") //标识服务为 feign 的客户端 public interface ProviderFeignClient { //定义端点的路径和动作 @RequestMapping( method= RequestMethod.GET, value="/providers/{providerId}", consumes="application/json") //定义传入端点的参数,该方法可以由客户端调用以触发组织服务 Provider getProvider(@PathVariable("providerId") String providerId); }
4、要是用 ProviderFeignClient 类,开发人员只需要自动装配并使用它即可。
二、Openfeign常用配置
超时配置
feign: client: config: # 要调用服务的名称 stock-service: #如果是全局配置 则为 default # 设置日志记录级别,其取值共有none、basic、headers、full loggerLevel: HEADERS # feign的配置优先于ribbon connectTimeout: 5000 readTimeout: 5000
负载均衡策略配置
1、修改配置文件
stock-service: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
2、修改JavaConfig类
在 JavaConfig 类中添加负载 Bean 方法。全局所有feign对应服务都可以生效。
@Configuration public class FeignConfiguration { /** * 配置随机的负载均衡策略 * 特点:对所有的服务都生效 */ @Bean public IRule loadBalancedRule() { return new RandomRule(); } }
三、定义拦截器
/** * 自定义feign拦截器 */ public class CustomFeignInterceptor implements RequestInterceptor { Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void apply(RequestTemplate requestTemplate) { //写一些自己的逻辑 带上token 什么之类的 String access_token = UUID.randomUUID().toString(); requestTemplate.header("Authorization",access_token); logger.info("feign拦截器!"); } }
注册此拦截器
@Configuration public class OpenFeignConfig { /** * 自定义feign拦截器 * @return */ @Bean public CustomFeignInterceptor customFeignInterceptor() { return new CustomFeignInterceptor(); } }
如果写在配置类中,注入的形式则就是全局的拦截器,因为并没有指定是为具体服务进行配置。
feign: client: config: stock-service: #服务名 requestInterceptors: - com.gaby.cloud.order.interceptor.feign.CustomFeignInterceptor
如果写在配置文件中指明了服务,则为具体的服务指定一个或者多个拦截器
posted on 2022-02-15 14:32 TrustNature 阅读(3607) 评论(0) 编辑 收藏 举报