当前位置: 首页 > news >正文

返回主页Do or Not Do, Must Keep Trying To Know The Result !尝试远比想象好 - - - - 弥烟袅绕

引入依赖

<!-- pom.xml --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> // 启动类开启 Feign @SpringBootApplication @EnableFeignClients public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args); } }

回到顶部

二、声明 Feign 客户端

// 调用 user-service 的 Feign 接口 @FeignClient(name = "user-service", path = "/api/users") public interface UserFeignClient { @GetMapping("/{id}") User getUserById(@PathVariable("id") Long id); @PostMapping User createUser(@RequestBody User user); @GetMapping List<User> listUsers(@RequestParam("page") int page, @RequestParam("size") int size); @DeleteMapping("/{id}") void deleteUser(@PathVariable("id") Long id); } // 在 Service 中注入使用 @Service public class OrderService { @Autowired private UserFeignClient userFeignClient; public Order createOrder(Long userId, Long productId) { // 像调用本地方法一样调用远程服务 User user = userFeignClient.getUserById(userId); // 业务逻辑... } }

回到顶部

三、配置超时和重试

# application.yml feign: client: config: default: connectTimeout: 5000 readTimeout: 10000 loggerLevel: FULL user-service: connectTimeout: 3000 readTimeout: 5000 # 全局超时配置 ribbon: ConnectTimeout: 3000 ReadTimeout: 5000 MaxAutoRetries: 1 MaxAutoRetriesNextServer: 2

回到顶部

四、Feign 日志配置

@Configuration public class FeignConfig { @Bean public Logger.Level feignLoggerLevel() { return Logger.Level.FULL; // 记录完整请求响应 } } // 在 FeignClient 中使用自定义配置 @FeignClient(name = "user-service", configuration = FeignConfig.class) public interface UserFeignClient { // ... } # 日志级别说明 # NONE: 无日志(默认) # BASIC: 仅记录请求方法、URL、响应状态码、执行时间 # HEADERS: 记录 BASIC + 请求/响应头 # FULL: 记录 HEADERS + 请求/响应体

回到顶部

五、请求拦截器(传递 Token)

@Component public class FeignAuthInterceptor implements RequestInterceptor { @Override public void apply(RequestTemplate template) { // 从请求上下文获取 Token ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (attributes != null) { HttpServletRequest request = attributes.getRequest(); String token = request.getHeader("Authorization"); if (token != null) { // 将 Token 传递给下游服务 template.header("Authorization", token); } } } } // 配置拦截器 @Configuration public class FeignConfig { @Bean public RequestInterceptor feignAuthInterceptor() { return new FeignAuthInterceptor(); } }

回到顶部

六、Fallback 降级

@FeignClient(name = "user-service", fallbackFactory = UserFeignFallbackFactory.class) public interface UserFeignClient { @GetMapping("/{id}") User getUserById(@PathVariable("id") Long id); } // 降级工厂:可以获取到异常信息 @Component public class UserFeignFallbackFactory implements FallbackFactory<UserFeignClient> { @Override public UserFeignClient create(Throwable cause) { return new UserFeignClient() { @Override public User getUserById(Long id) { log.error("调用 user-service 失败", cause); return new User(id, "默认用户", "降级数据"); } }; } } # 开启降级 feign.circuitbreaker.enabled: true
http://www.jsqmd.com/news/1093334/

相关文章:

  • 厂房工业门选型指南:提升门 / 快速门 / 堆积门工况对比
  • 嵌入式软件开发回归
  • 【毕业设计】医院管理系统 SpringBoot+Vue 完整源码(含论文+数据库,可运行)
  • 如何在数据分析中应用时间序列分析?有哪些常用的时间序列模型?
  • 解锁高阶对话力:ChatGPT角色扮演提示词的5层结构化设计方法(附可立即复用的模板库)
  • 高效获取网盘真实下载地址:LinkSwift直链解析工具深度解析
  • Hook赛道黑马SATO:靠硬核经济模型站稳赛道标杆
  • 从入门到实践:全面解析AI Agent(智能体)的技术原理与应用落地
  • Java毕设选题推荐:基于 SpringBoot 的用户权限博客内容管理系统 图文博客资讯发布与留言交互系统设计【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【课程设计/毕业设计】基于 Web 的域名过期预警与提醒管理系统 网络域名用户权限分级管理系统设计与实现【附源码、数据库、万字文档】
  • 游戏测试用例设计:从需求拆解到实战落地的完整指南
  • 深入聊聊 OSS 数据库:开源数据库选型、运用场景与收费全景
  • SpiderFoot开源情报工具:自动化OSINT侦察框架部署与实战指南
  • 我用AI搭了一个属于自己的科研静态网站!
  • 算法~时间戳计算两个日期是否为同天同时同分
  • CasaOS个人云系统实战:从零部署到Docker应用与硬盘共享
  • Java synchronized 锁优化的实现逻辑
  • Java毕设项目:基于 SpringBoot+Vue 的前后端分离博客系统设计与实现 现代化轻量化个人博客平台 (源码+文档,讲解、调试运行,定制等)
  • AI赋能Burp Suite:智能渗透测试插件Repeater Strike的设计与实现
  • rsync 和 scp 到底有啥区别?一次性看懂
  • 高中生接入经典模板引擎!让单片机跑上动态网页,通吃 MicroPython/CPython
  • DES算法详细介绍我就不展开了,但是简略的过程如上。同样,有需要的读者适当考虑读全英文文献[1],或者利用各个社区进行系统的学习。
  • Windows高效LaTeX环境搭建:VS Code、MiKTeX与Perl的协同配置指南
  • Claude Code再强,也有这7件事做不了
  • 高速图像采集设计原理图:6-基于TMS320C6678、FPGA XC5VSX95T的6U CPCI 8路光纤信号处理卡
  • 环境准备1. Python 环境
  • 国内大学生论文季必用的AI论文软件有哪些?
  • Java的MethodHandle动态调用点缓存与反射在性能热点上的权衡
  • 精密锰铜电阻全解析:选型避坑与实战案例
  • 如何3分钟获取阿里云盘Refresh Token:扫码授权完整教程