九、Spring Cloudシリーズ:実戦経験まとめ

5831 ワード

GitHubプロジェクトcloud-phantomには、フルセットのSpring Coud生態系の構築が含まれています.eureka/config/zul/hystrix/turbine/admin/zipkinなどの配置が整っています.説明文書を配置しています.starを歓迎します.
一、spring cloud configダイナミックリフレッシュ
1.ダイナミックリフレッシュ
プロジェクト依存にactuatの依存パッケージを導入する必要があり、ダイナミックなリフレッシュが必要なコンテナbeanに@RefshScope注を加えてから有効になります.
二、Feignの使用上の注意事項
1.Feign Client作成
  • @Request Mappingコメントをクラスで使わないでください.そうでないとfallbackを使う時、誤報があります.注釈は引き継がれます.
  • 各パラメータの注釈は全部書きます.例えば@Request Param(value="name")
  • に注釈が書かれていないパラメータは、Feignがパラメータをbodyに入れ、post方式で要求し、要求方法がgetであっても.
  • 2.Feignログを印刷する
  • 第1の方法:構成クラスには、以下のようなコンテンツが追加される
  • .
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
  • 第二の方法:プロファイル
  • を使用する.
    logging.level.=debug
    //  
    logging.level.com.kingboy.feign.UserFeign
    3.feign Hystrix遮断器を使用すると効果がなく、返品方法を行わない
    どういうわけか分かりませんが、配置が開けていません.配置ファイルに下記の内容を追加します.
    feign.hystrix.enabled=true
    三、Eureka使用
    1.インスタンスをipでEurekaに登録する(デフォルトのhostname)
    クライアント構成に以下を追加します.
    eureka.instance.prefer-ip-address=true
    2.Eureka Cientに複数の登録センターアドレスを配置する.
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:7000/eureka/,http://localhost:7001/eureka/
    3.Eurekaサービス発見登録が遅い解決
    Eureka Serverの設定が変更されたクリーンアップ時間は、無効なサービスを速やかに消去します.
    #eureka  
    eureka:
      server:
        #             
        eviction-interval-timer-in-ms: 20000
    Eureka Client端の配置は、継続時間とタイムアウト時間を変更します.
    #      
    eureka:
      instance:
        #  IP    
        prefer-ip-address: true
        #       ID
        instance-id: ${spring.cloud.client.ipAddress}:${server.port}
        #    ,         (   30s)
        lease-renewal-interval-in-seconds: 5
        #    ,         (   90s)
        lease-expiration-duration-in-seconds: 10
    4.Eureka CietのインスタンスIDを変更する
    #      
    eureka:
      instance:
        #       ID
        instance-id: ${spring.cloud.client.ipAddress}:${server.port}
    実は同時に複数の登録センターに登録するわけではありません.最初の登録が成功すれば、次の登録はできません.もし最初のeurekaの登録が失敗したら、第二のeurekaに登録してみます.
    四、開発環境の悩み
    1.すべての人はeurekaとconfigを実行しないと使えません.
    開発においては、まず現地のeurekaとconfigを起動しなければならない.ですから、私たちは一つのサーバーにeurekaとconfigセンターを配置して、プロジェクトの中のeurekaとconfigアドレスを全部サーバーに向けてurlに対応させてもいいです.これは一人一人が自分で開発したサービスを起動すればいいです.(しかし、このようにしても欠点があります)
    五、分散式事物
    物事は頭が痛くて、最初はデータベースのこと、分散的なものなどの処理方法を考えましたが、効率と利用性の点ではだめです.したがって、最善の方法は、物事を使わずに補償方式(TCCを参照できる)を採用し、コードでデータの整合性を保証することです.(jdのある技術を聞いたことがありますが、大牛も物事を使っていません.サービスが多すぎて、効率が低いです.)
    六、日記はどうやって記録し、追跡できますか?
    ログバックを使ってログを記録しました.基本的な考え方はサービスにseluthのパッケージを追加することで、ログにtracceId、spanId、parentIdをプリントアウトすることができます.(tracIdは要求全体のID、spanIdを識別します.本サービスの今回の要求ID、parentID、私のサービス要求IDを呼び出します.)
    また、ログstashの依存性を利用してログをjsonファイルに保存し、ELKを使ってログを集中処理し、検索する.私のgithubプロジェクトcloud-phantomのプロバイダーとconsumerモジュールの処理を参考にできます.
    七、国境を越える問題
    これは小さな解決点です.私達のプロジェクトはvueを使ってsp開発を行います.クロスドメインが発生します.プロジェクト(もっと多いのはzulゲートウェイ)に下記の内容を配置してください.
    @Configuration
    public class CrossFilter extends WebMvcConfigurerAdapter {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            String[] origins = {"*"};
            registry.addMapping("/**")
                    .allowedOrigins(origins)
                    .allowCredentials(true)
                    .allowedMethods("*")
                    .maxAge(3600);
        }
    
    }