Несколько проблем с остановкой hystrix в openfeign в springcloud

Я недавно написал небольшой проект, используя микросервисную архитектуру, конечно без openfeign и hystrix. В процессе использования можно сказать, что возникают частые проблемы, и решить возникшие проблемы непросто.

  1. Новая версия hystrix не работает.Прежде
    всего обнаружено, что не работает фолбэк в процессе использования openfeign. Подумав, я проверил различные материалы, в большинстве из которых говорилось, что openfeign не включает hystrix по умолчанию. Необходимо установить
feign:
  hystrix:
    enabled: true

Но после настройки все равно не работает. Последнее, что следует учитывать, это изменение версии openfeign.Я использовал последнюю версию 3.0.3, а затем вернулся к версии 2.2.6.RELEASE, и она вернулась в норму.
Я не хочу жаловаться на обратную совместимость Spring Cloud локально здесь, после обновления версии некоторые библиотеки классов будут перемещены или удалены. Таким образом, вы можете ознакомиться с версией springcloud только на определенном этапе, а затем использовать ее в течение длительного времени.Даже если есть ошибки или серьезные дефекты, сложно легко обновиться до новой версии. С одной стороны, стоимость обучения высока, а с другой стороны, как проапгрейдить старые проекты. Напротив, .net core намного лучше.
2. Добавьте заголовок запроса токена к запросу openfeign.
Это относительно просто, просто настройте шаблон запроса openfeign.

@Configuration
public class FeignConfig implements RequestInterceptor {
    
    

    @Override
    public void apply(RequestTemplate requestTemplate) {
    
    
        var token = getToken();
        requestTemplate.header("X-Token",getToken());
    }
    private String getToken(){
    
    

        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if(servletRequestAttributes != null) {
    
    
            HttpServletRequest request = servletRequestAttributes.getRequest();
            if(request != null) {
    
    
                return request.getHeader("X-Token");
            }
        }
        return "";
    }

}

Но в процессе реального использования обнаружилась четвертая проблема. Не удалось получить HttpServletRequest
3. RequestContextHolder.getRequestAttributes(); пусто
Распространенное объяснение в Интернете — добавить конфигурацию RequestContextListner

 @Bean
    public RequestContextListener requestContextListener(){
    
    
        return new RequestContextListener();
    }

Однако это не яйцо, и увеличивать его бесполезно.
Наконец, в углу, я узнал, что это проблема стратегии изоляции hystrix после включения hystrix.

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: SEMAPHORE

Решить эту проблему относительно просто, и это решение не рекомендуется правительством.Официальная рекомендация - настроить стратегию параллелизма. Вам нужно написать класс самостоятельно, позволить ему наследовать класс HystrixConcurrencyStrategy и переписать метод wrapCallable
. Ради экономии времени сначала поставьте проект «Начать», а потом попробуйте что-нибудь другое.

Справочная статья:
https://blog.csdn.net/amosjob/article/details/97400347

Guess you like

Origin blog.csdn.net/aofengdaxia/article/details/120579330