九、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の方法:構成クラスには、以下のようなコンテンツが追加される .第二の方法:プロファイル を使用する.
どういうわけか分かりませんが、配置が開けていません.配置ファイルに下記の内容を追加します.
1.インスタンスをipでEurekaに登録する(デフォルトのhostname)
クライアント構成に以下を追加します.
Eureka Serverの設定が変更されたクリーンアップ時間は、無効なサービスを速やかに消去します.
四、開発環境の悩み
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ゲートウェイ)に下記の内容を配置してください.
一、spring cloud configダイナミックリフレッシュ
1.ダイナミックリフレッシュ
プロジェクト依存にactuatの依存パッケージを導入する必要があり、ダイナミックなリフレッシュが必要なコンテナbeanに@RefshScope注を加えてから有効になります.
二、Feignの使用上の注意事項
1.Feign Client作成
@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);
}
}