微服务之间的信息传递---OpenFeign拦截器

上篇我们已经实现了从网关传递信息到微服务

新的问题是,微服务之间如何传递信息

前面我们在公共模块中定义拦截器并保存用户信息到了线程变量

但注意:

线程变量的作用域范围仅限于当前请求的线程。每个请求对应一个独立的线程变量,不同请求的数据是互不相干的,因此,不同的微服务实例间是无法共享ThreadLocal变量的。

如果一次请求经过了多个微服务,只有在单个微服务内才能访问到服务中的ThreadLocal的信息。

问题场景

如果用户信息经过验证后被保存在ThreadLocal中,并传递到订单服务,就可以根据这些信息创建用户订单。但是,当用户服务调用购物车服务以清空购物车时,ThreadLocal中的信息不会传递,因此无法获得用户信息,也就不清楚应该清空哪个用户的订单。

OpenFeign

HTTP请求客户端作为微服务间发送HTTP请求的工具,提供了一种解决方案,用以克服之前RestTemplate客户端在远程调用中遇到的服务治理问题。它通过注解来支持以接口方式发送RESTful请求,简化了开发者的工作,只需激活并调用接口方法,剩余的任务由Spring框架自动处理。

复制代码
开启:@EnableFeignClients(basePackages = "com.hmall.api.client"/

某个服务接口:

OpenFeign拦截器

由于调用购物车的服务是OpenFeign发起的,我们在OpenFeign发请求前携带请求头过去就可以了

每次发送请求前都会执行apply方法 进行拦截,然后对请求模板进行封装,以自定义请求信息。

(需在对应的微服务启动类上指定openfeign配置)

网关与微服务的通信https://mp.csdn.net/mp_blog/creation/editor/143430164

RestTemplate客户端https://mp.csdn.net/mp_blog/creation/editor/143351234

相关推荐
是多巴胺不是尼古丁3 分钟前
期末java复习--string
java·开发语言·python
Survivor0018 分钟前
高并发系统流量治理的底层算法
java·开发语言
凡人叶枫11 分钟前
Effective C++ 条款35:考虑 virtual 函数以外的其他选择
java·c++·spring
garmin Chen19 分钟前
从 Transformer 到 Agent:大模型技术全景解析
java·人工智能·python·深度学习·transformer
愚公移码24 分钟前
蓝凌EKP18产品:流程引擎技术篇之流程核心概念模型
java·人工智能·流程引擎·蓝凌
Full Stack Developme31 分钟前
Apache Tika 教程
java·开发语言·python·apache
鹅城剑仙35 分钟前
Spring Boot 微服务架构设计与最佳实践
spring boot·后端·微服务
鹅城剑仙1 小时前
Java线程池完全指南
java
李白的天不白1 小时前
SmartAdmin(基于 Spring Boot 框架)中配置跨域请求 VUE3 设置请求头
java·前端
橙子进阶之路1 小时前
Java线程(CompletableFuture)
java·开发语言