ディレクトリナビゲーション
序文
前の章では、WebFluxの原理とアプリケーションについて説明しました。このセクションでは、マイクロサービストピックの内容、合計16のセクションを引き続き共有します。
- マイクロサービストピック01-春のアプリケーション
- マイクロサービストピック02-SpringWebMVCビューテクノロジー
- マイクロサービストピック03-REST
- マイクロサービストピック04-SpringWebFluxの原則
- マイクロサービストピック05-SpringWebFluxアプリケーション
- マイクロサービストピック06-クラウドネイティブアプリケーション
- マイクロサービストピック07-SpringCloud構成管理
- マイクロサービストピック08-SpringCloudサービスディスカバリ
- マイクロサービストピック09-SpringCloudの負荷分散
- マイクロサービストピック10-SpringCloudサービスサーキットブレーカー
- マイクロサービストピック11-SpringCloudサービスコール
- マイクロサービストピック12-SpringCloud Gateway
- マイクロサービストピック13-SpringCloud Stream(on)
- マイクロサービストピック14-SpringCloud Bus
- マイクロサービストピック15-SpringCloudStreamの実装
- マイクロサービストピック16-SpringCloudの全体的なレビュー
このセクションの要点は次のとおりです。
- ブートストラップアプリケーションコンテキスト:Spring Cloudの新しく導入されたブートストラップアプリケーションコンテキストを紹介し、Spring Frameworkアプリケーションコンテキストとの接続を説明し、SpringBootアプリケーションにおけるブートストラップアプリケーションコンテキストの階層関係をさらに理解します。
- エンドポイントの紹介:コンテキストの再起動:次のような新たに導入されたに基づいて導入エンドポイント(エンドポイント)春の雲春ブーツ、
/restart
ライフサイクル:/pause
、/resume
など
SpringCloudの機能
Spring Cloudは、一般的なユースケースにすぐに使える優れたエクスペリエンスと、他のユースケースをカバーする拡張メカニズムを提供することに取り組んでいます。
- 分散/バージョン管理された構成
- サービスの登録と発見
- ルーティング
- サービス間の呼び出し
- 負荷分散
- ブレーカ
- 分散メッセージング
クラウドネイティブとは何ですか?
SpringCloud(Greenwich.SR5)クラウドネイティブ公式ドキュメント
Cloud Nativeは、継続的デリバリーと価値主導型開発におけるベストプラクティスの容易な採用を促進するアプリケーション開発のスタイルです。関連する分野は、12要素のアプリケーションの構築であり、開発慣行は、たとえば、宣言型プログラミング、管理、および監視の使用を通じて、配信および運用の目標と整合しています。Spring Cloudは、これらの開発スタイルをさまざまな特定の方法で促進します。出発点は、分散システムのすべてのコンポーネントが簡単にアクセスする必要がある一連の機能です。
SpringCloudが構築されているSpringBootは、これらの機能の多くをカバーしています。Spring Cloudは、SpringCloudコンテキストとSpringCloudCommonsの2つのライブラリとしてより多くの機能を提供します。Spring Cloud Contextは、ApplicationContext Spring Cloudアプリケーション用のユーティリティと特別なサービス(ブートコンテキスト、暗号化、更新スコープ、環境エンドポイント)を提供します。Spring Cloud Commonsは、さまざまなSpring Cloud実装(Spring CloudNetflixやSpringCloud Consulなど)で使用される抽象クラスと共通クラスのセットです。
Springアプリケーションのコンテキスト- ApplicationContext
あなたがうまくやりたいのなら、あなたは最初にあなたの道具を研ぐ必要があります!SpringCloudをよく学ぶにはSpringBootの基礎が必要であり、SpringBootをよく学ぶにはSpringFrameworkを深く理解する必要があります。Springアプリケーションのコンテキストは、Springフレームワーク全体の非常に重要な部分です。
前の章ApplicationContext
でSpringアプリケーションのコンテキストについて何度も言及しましたComponent
。また、このシリーズの最初のセクションで「派生」という注釈についても言及しました。では、接続は何ですか?Springアプリケーションのコンテキストのレベルをどのように理解する必要がありますか?
春のイベント
春のイベントの主要なクラスを確認します。
イベントクラス:ApplicationEvent
イベントリスナー: ApplicationListener
イベントブロードキャスター:ApplicationEventMulticaster
その唯一の実装クラスSimpleApplicationEventMulticaster
イベント送信者:ApplicationEventPublisher
コンテキストレベルを理解する
Q:クラス階層:BeanFactory
ApplicationContext
A:ApplicationContext
このクラスを見ると、ListableBeanFactory
うまく拡張されていますHierarchicalBeanFactory
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
...
}
構造の観点からApplicationContext
、BeanFactory
実装に関連付けられています。ApplicationContext
抽象実装クラスにAbstractRefreshableApplicationContext
は、プロパティbeanFactoryが含まれていますDefaultListableBeanFactory
実際にAppliationContext
継承されBeanFactoy
ます。
ここで使用されるデザインパターンは、継承および拡張されたデコレータパターンであり、基礎となる実装は拡張された例に基づいています。
総括する:
-
BeanFactory
これは、Beanのライフサイクルを管理する実際のBeanコンテナです。 -
ApplicationContext
これには、BeanFactory
職務およびその他の機能が含まれます。
Q:ApplicationContext
継承されたHierarchicalBeanFactory
、開発者向けのヒント?
A:からのApplicationContext
Beanライフサイクル管理機能。BeanFactory
これはHierarchicalBeanFactory
サブインターフェースであり、BeanFactory
階層関係があることを示しています。また、getParent()
親を返すメソッドもありApplicationContext
、それらのサブインターフェイスConfigurableApplicationContext
は親のApplicationContext
能力を設定しています。
類推:
- 親
BeanFactory
(10個のBeanを管理)- 子
BeanFactory
(20個のBeanを管理)- 親
ClassLoader
(10クラスをロード)- 子
ClassLoader
(20クラスをロード)
デモデモ:Springコンテキストを開始するように設定する
@EnableAutoConfiguration
@RestController
public class SpringBootApplicationBootstrap {
public static void main(String[] args) {
AnnotationConfigApplicationContext parentContext = new AnnotationConfigApplicationContext();
parentContext.setId("test");
// 在"test" 上下文注册一个 "helloWorld" String 类型的 Bean
parentContext.registerBean("helloWorld", String.class, "Hello,World");
// 启动"test" 上下文
parentContext.refresh();
new SpringApplicationBuilder(SpringBootApplicationBootstrap.class)
.parent(parentContext) // 显式地设置双亲上下文
.run(args);
}
@Autowired // String message Bean
@Qualifier("helloWorld") // Bean 名称,来自于 “test” 上下文
private String message;
@RequestMapping("")
public String index() {
return message;
}
}
このコンテキストを実行して、http:// localhost:9091 /アクチュエータ/ beansにアクセスします。
子コンテキストは親コンテキストによってアクティブ化される必要があることを説明します。上の図に示されているコンテキスト関係は次のとおりです。
- application-1そのparentIdはtestです
- そのparentIdがブートストラップであることをテストします
- そのparentIdのブートストラップは
null
Spring Boot1.xにはデフォルトでApplicationContextがあります。コンテキストを個別に管理する場合、2つのApplicationContextがあります。
Spring Boot 2.0はApplicationContextをマージし、SpringCloudはBootstrapApplicationContextを追加します。
ブートストラップがどのリソースを早くロードする必要があるかを意味しますか?
Bootstrapアプリケーションのコンテキストを理解する
キーコールの実装
SpringBootの実装
org.springframework.boot.builder.ParentContextApplicationContextInitializer
SpringCloudの実装
org.springframework.cloud.bootstrap.BootstrapApplicationListener
。監視するイベントはですApplicationEnvironmentPreparedEvent
。推論の意味:Environment
準備完了(調整済み)
技術協会:Springアプリケーションコンテキストレベル、Springイベント
環境を理解する
理解SpringBootアクチュエータエンドポイント
通常、SpringBootはヘルスチェックを実行し、このテクノロジーを使用すると言いますが、実際のアプリケーションでは、セキュリティを確保するために、さまざまなエンドポイント権限が設定されます。ここでは、基本的な状況を簡単に紹介します。
スタートアップクラスを設定する
@EnableAutoConfiguration
public class SpringBootApplicationBootstrap {
public static void main(String[] args) {
SpringApplication.run(SpringBootApplicationBootstrap.class,args);
}
}
すべてのWeb管理エンドポイントを開きます
spring.application.name = first-spring-cloud-app
# 设置 Web 服务端口
server.port = 9090
# 设置 Web 管理端口(服务上下文和管理上线独立)
management.server.port = 9091
# 开放 所有Web 管理 Endpoints
management.endpoints.web.exposure.include = *
ログ出力を開始します
Springアプリケーションコンテキストを開始し、アドレスにアクセスします:http:// localhost:9091 /アクチュエータ
JSON表示:
{
"_links":{
"self":{
"href":"http://localhost:9091/actuator",
"templated":false
},
"auditevents":{
"href":"http://localhost:9091/actuator/auditevents",
"templated":false
},
"beans":{
"href":"http://localhost:9091/actuator/beans",
"templated":false
},
"health":{
"href":"http://localhost:9091/actuator/health",
"templated":false
},
"conditions":{
"href":"http://localhost:9091/actuator/conditions",
"templated":false
},
"configprops":{
"href":"http://localhost:9091/actuator/configprops",
"templated":false
},
"env":{
"href":"http://localhost:9091/actuator/env",
"templated":false
},
"env-toMatch":{
"href":"http://localhost:9091/actuator/env/{toMatch}",
"templated":true
},
"info":{
"href":"http://localhost:9091/actuator/info",
"templated":false
},
"loggers":{
"href":"http://localhost:9091/actuator/loggers",
"templated":false
},
"loggers-name":{
"href":"http://localhost:9091/actuator/loggers/{name}",
"templated":true
},
"heapdump":{
"href":"http://localhost:9091/actuator/heapdump",
"templated":false
},
"threaddump":{
"href":"http://localhost:9091/actuator/threaddump",
"templated":false
},
"metrics-requiredMetricName":{
"href":"http://localhost:9091/actuator/metrics/{requiredMetricName}",
"templated":true
},
"metrics":{
"href":"http://localhost:9091/actuator/metrics",
"templated":false
},
"scheduledtasks":{
"href":"http://localhost:9091/actuator/scheduledtasks",
"templated":false
},
"httptrace":{
"href":"http://localhost:9091/actuator/httptrace",
"templated":false
},
"mappings":{
"href":"http://localhost:9091/actuator/mappings",
"templated":false
},
"refresh":{
"href":"http://localhost:9091/actuator/refresh",
"templated":false
},
"features":{
"href":"http://localhost:9091/actuator/features",
"templated":false
}
}
}
上記の構成ファイルでは、すべてのポートを開いているので、次のように/ actuatorにアクセスして公開されているすべてのエンドポイントのアドレスを取得します。
"beans":{
"href":"http://localhost:9091/actuator/beans",
"templated":false
},
次に、この時点でhttp:// localhost:9091 / actuator / beansにアクセスします。Springによって監視されているBeanの詳細を取得します。
環境ポート(/アクチュエータ/ env)を取得します
アクセスポート:http:// localhost:9091 / Actuator / env
/ actuator / pauseおよび/ actuator / resumeポート
/ actuator / pauseポートと/ actuator / resumeポートはデフォルトで無効になっています。最初に、構成ファイルでエンドポイントを有効にする必要があります。
management.endpoint.restart.enabled=true
management.endpoint.pause.enabled=true
management.endpoint.resume.enabled=true
-
/アクチュエータ/一時停止->
ApplicationContext#stop()
-> Spring LifeCycleBeansstop()
。ただし、LifeCycleインスタンス(ApplicationContext)はLifeCycleBeanと同じではありません -
/アクチュエータ/履歴書->
ApplicationContext#start()
-> Spring LifeCycle Beansstart()
エンドポイントの紹介
Spring Boot Exploration |アクチュエータエンドポイント詳細説明
追記
このセクションのコードアドレス:https://github.com/harrypottry/microservices-project/tree/master/spring-cloud-project/spring-cloud-native-application
アーキテクチャに関する知識の詳細については、Javaに関するこのシリーズの記事に注意してください:Javaアーキテクトの成長への道