微服务之间的信息传递---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

相关推荐
u***1372 分钟前
【SpringBoot】【log】 自定义logback日志配置
java·spring boot·logback
T***u33315 分钟前
SpringBoot集成SkyWalking,分布式链路追踪
spring boot·分布式·skywalking
小坏讲微服务18 分钟前
Spring Cloud Alibaba整合SkyWalking的监控完整使用
java·微服务·架构·springcloud·监控·skywalking·java微服务
chxii28 分钟前
第六章:MySQL DQL 表之间的关系 自连接 一对一、一对多、多对一、多对多
java·前端·mysql
煎蛋学姐1 小时前
SSM基于J2EE的山西旅游网站的设计与实现iiqmx(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·java-ee·ssm 框架·山西旅游网站·在线预订系统
百***61871 小时前
Spring的构造注入
android·java·spring
小白宗轩1 小时前
vsCode的java配置
java·vscode·python
桦说编程1 小时前
如果让我从头再来学习并发编程
java·设计模式·性能优化
414丶小哥1 小时前
Jetbrains系列工具 Idea Websotrm中使用Claude Code
java·ide·intellij-idea·claudecode
zhouyunjian2 小时前
syncronized使用与深入研究
java·开发语言