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 阅读(3712) 评论(0) 收藏 举报
浙公网安备 33010602011771号