Mehrere Probleme mit openfeign, das Hystrix in Springcloud stoppt

Ich habe kürzlich ein kleines Projekt geschrieben, bei dem die Microservice-Architektur verwendet wurde. Openfeign und Hystrix sind natürlich unverzichtbar. Man kann sagen, dass es während des Nutzungsprozesses häufig zu Problemen kommt und es nicht einfach ist, die aufgetretenen Probleme zu lösen.

  1. Die neue Version von hystrix funktioniert nicht.
    Zunächst wurde festgestellt, dass der Fallback bei der Verwendung von openfeign nicht funktioniert. Nachdem ich darüber nachgedacht hatte, überprüfte ich verschiedene Materialien, von denen die meisten besagten, dass Openfeign Hystrix standardmäßig nicht aktiviert. Muss eingestellt werden
feign:
  hystrix:
    enabled: true

Aber nach dem Einstellen funktioniert es immer noch nicht. Das Letzte, was zu berücksichtigen ist, ist möglicherweise die Änderung der OpenFeign-Version. Ich habe die neueste Version 3.0.3 verwendet und bin dann zur Version 2.2.6.RELEASE zurückgekehrt, und es war wieder normal.
Ich möchte mich hier nicht über die lokale Abwärtskompatibilität von Spring Cloud beschweren. Nach dem Update einer Version werden einige Klassenbibliotheken ein- oder ausgezogen. Auf diese Weise können Sie sich erst zu einem bestimmten Zeitpunkt mit einer Version von Springcloud vertraut machen und diese dann über einen längeren Zeitraum verwenden. Selbst wenn Fehler oder schwerwiegende Mängel vorliegen, ist es schwierig, problemlos auf eine neue Version zu aktualisieren. Einerseits sind die Lernkosten hoch und andererseits die Art und Weise, wie alte Projekte aktualisiert werden können. Im Gegensatz dazu ist .net core viel besser.
2. Fügen Sie den Anforderungsheader des Tokens zur Anforderung von openfeign hinzu.
Dies ist relativ einfach. Konfigurieren Sie einfach die Anforderungsvorlage von 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 "";
    }

}

Aber im eigentlichen Nutzungsprozess wurde das vierte Problem entdeckt. HttpServletRequest 3 kann nicht abgerufen werden.
RequestContextHolder.getRequestAttributes(); ist leer.
Eine gängige Erklärung im Internet ist das Hinzufügen einer RequestContextListner-Konfiguration

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

Es ist jedoch kein Ei und es ist sinnlos, es zu vermehren.
Schließlich fand ich in einer Ecke heraus, dass es das Problem der Isolationsstrategie von Hystrix war, nachdem Hystrix eingeschaltet wurde.

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

Es ist relativ einfach, dieses Problem zu lösen, und dann wird diese Lösung von der Regierung nicht empfohlen. Die offizielle Empfehlung besteht darin, die Parallelitätsstrategie anzupassen. Sie müssen selbst eine Klasse schreiben, sie die HystrixConcurrencyStrategy-Klasse erben lassen und die wrapCallable-Methode neu
schreiben . Stellen Sie aus Zeitgründen zunächst das Projekt in Gang und probieren Sie später etwas anderes aus.

Referenzartikel:
https://blog.csdn.net/amosjob/article/details/97400347

Supongo que te gusta

Origin blog.csdn.net/aofengdaxia/article/details/120579330
Recomendado
Clasificación