关于 openFeign 调用时 hystrix 隔离策略导致的线程异常

来源:15-5 远程服务调用 Feign 接口定义及配置(2)

橘Cc

2023-04-18

核心问题代码如下:

package com.imooc.ecommerce.feign;

import feign.RequestInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;

@Configuration
public class FeignConfig {

    /**
     * 给 Feign 配置请求拦截器
     * RequestInterceptor 是我们提供的 open-feign 的请求拦截器,把 Header 信息传递
     * */
    @Bean
    public RequestInterceptor headerInterceptor() {

        return template -> {
            ServletRequestAttributes attributes =
                    (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
			
			...

bug复现:

  1. 当我使用线程池隔离策略时候,attributes 的值为null,调用其他微服务符合逻辑的报错了
  2. 后来考虑可能不在同一个线程池里,换成信号量隔离,attributes 拿到了值,并且成功调用

提问:

  1. 难道不能使用线程池隔离?或者有其他解决办法吗?
写回答

1回答

张勤一

2023-04-24

有可能是的,可能是线程之间的数据同步需要更上层的线程或者模块来处理;

1
0

Spring Cloud / Alibaba 微服务架构实战

从架构设计到开发实践,手把手实现

1210 学习 · 674 问题

查看课程