
spring cloud 环境下,假如 A 服务的某个接口需要需要调用 B 服务的接口 但是 B 服务的接口执行比较慢,所以我使用了 @Async 异步调用 B 服务,且调用 B 服务不需要返回值直接 return。
服务间调用使用了 feign,并使用了拦截器配置了 feign,用于传递 request 的一些 header 信息,主要是一些用户登入信息。默认 feign 调用原 request 的信息都是不传递的。
这个时候就出现问题了,因为 A 服务的接口调用都结束了,异步方法内再使用 feign,就读不到 request 信息,导致 feign 无法读取认证信息而返回了 401.
我怎么才能在接口结束后在线程内还能拿到 request
1 IamNotShady 2019 年 8 月 24 日 session 存在 redis? A 调用 B 的时候带上 session id |
2 IamNotShady 2019 年 8 月 24 日 @IamNotShady 或者其他认证信息 |
3 coderstory OP @IamNotShady feign 调用的时候 需要重新添加 header 也就是写了一个 RequestInterceptor 的实现类 这个时候怎么拿 session id ? |
4 iluhcm 2019 年 8 月 24 日 via iPhone 你的问题在于 request 过期,那么把你在 request 里所需要的信息做一份深拷贝再给 b 服务就可以了。 |
5 SoloCompany 2019 年 8 月 25 日 你先理解一下什么是生命周期 |
6 yiyi11 这就是分布式 session 的问题。 |
7 yiyi11 2019 年 8 月 25 日 via Android 换个思路吧,把异步放在 b 服务,a 服务还是同步调用 b 服务。 |
8 limuyan44 2019 年 8 月 25 日 存 redis 拿不就好了干嘛来回传 |