SpringCloud で Openfeign が hystrix を停止する際のいくつかの問題

最近、マイクロサービス アーキテクチャを使用した小さなプロジェクトを書きました。もちろん、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 "";
    }

}

しかし実際に使ってみると、4つ目の問題点が判明しました。HttpServletRequest を取得できません
3. RequestContextHolder.getRequestAttributes(); が空です
インターネット上の一般的な説明は、RequestContextListner 構成を追加することです

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

ただし、卵ではないので増やしても無駄です。
最後に、追い詰められて、ヒストリックスがオンになった後のヒストリックスの隔離戦略の問題であることがわかりました。

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

この問題を解決するのは比較的簡単ですが、この解決策は政府によって推奨されていません。公式の推奨事項は、同時実行戦略をカスタマイズすることです。自分でクラスを作成し、それに HystrixConcurrencyStrategy クラスを継承させ、wrapCallable メソッドを書き直す必要があり
ます時間の都合上、最初にプロジェクト「Get Going」を実行し、後で別のことを試してください。

参考記事:
https ://blog.csdn.net/amosjob/article/details/97400347

おすすめ

転載: blog.csdn.net/aofengdaxia/article/details/120579330