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 2022-02-15 14:32 TrustNature 阅读(3636) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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工具