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常用配置

超时配置

1
2
3
4
5
6
7
8
9
10
feign:
  client:
    config:
      # 要调用服务的名称
      stock-service: #如果是全局配置 则为 default
        # 设置日志记录级别,其取值共有none、basic、headers、full
        loggerLevel: HEADERS
        # feign的配置优先于ribbon
        connectTimeout: 5000
        readTimeout: 5000

负载均衡策略配置

1、修改配置文件

1
2
3
stock-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

2、修改JavaConfig类

在 JavaConfig 类中添加负载 Bean 方法。全局所有feign对应服务都可以生效。

1
2
3
4
5
6
7
8
9
10
11
@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   TrustNature  阅读(3636)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

统计

点击右上角即可分享
微信分享提示