2.2. ブースタープロジェクトの生成
Fuse ブースタープロジェクトは、スタンドアロンアプリケーションの実行を手助けする開発者向けのプロジェクトです。ここでは、ブースタープロジェクトの 1 つである Circuit Breaker ブースターの生成手順を説明します。この演習では、Fuse on Spring Boot の便利なコンポーネントを使用します。
Netflix/Hystrix サーキットブレーカーを使用すると、ネットワーク接続の中断やバックエンドサービスの一時的な利用停止に分散アプリケーションが対処できるようになります。サーキットブレーカーパターンの基本概念は、バックエンドサービスが一時的に利用できなくなった場合に備えて、依存するサービスの損失を自動的に検出し、代替動作をプログラムで作成できるようにすることです。
Fuse サーキットブレーカーブースターは、次の 2 つの関連サービスで構成されます。
-
呼び名を返すバックエンドサービスである
name
サービス。 -
名前を取得する
name
サービスを呼び出し、文字列Hello, NAME
を返すフロントエンドサービスであるgreetings
サービス。
このブースターデモンストレーションでは、Hystrix サーキットブレーカーは greetings
サービスと name
サービスとの間に挿入されます。バックエンドの name
サービスが利用できなくなると、name
サービスが再起動するまでの間に greetings
サービスはブロックされず、代替動作にフォールバックして即座にクライアントに応答します。
前提条件
- Red Hat Developer Platform にアクセスできる。
- サポートされるバージョンの Java Developer Kit (JDK) を持っている。詳細は Red Hat Fuse でサポートされる設定 を参照してください。
- Apache Maven 3.3.x 以上が必要です。
手順
- https://developers.redhat.com/launch に移動します。
START をクリックします。
ランチャーウィザードによって、Red Hat アカウントにログインするよう要求されます。
- Log in or register ボタンをクリックし、ログインします。
- Launcher ページで Deploy an Example Application ボタンをクリックします。
- Create Example Application ページで Create Example Application as フィールドに名前 fuse-circuit-breaker を入力します。
- Select an Example をクリックします。
Example ダイアログで、Circuit Breaker オプションを選択します。Select a Runtime ドロップダウンメニューが表示されます。
- Select a Runtime ドロップダウンメニューで Fuse を選択します。
-
バージョンのドロップダウンメニューで 7
. 5 (Red Hat Fuse) を選択します。2.21.2 (Community)
バージョンは選択しないでください。 - Save をクリックします。
- Create Example Application ページで Download をクリックします。
-
Your Application is Ready ダイアログが表示されたら、
Download.zip
をクリックします。ブラウザーが生成されたブースタープロジェクト (ZIP ファイルとしてパッケージ) をダウンロードします。 - アーカイブユーティリティーを使用して、生成されたプロジェクトをローカルファイルシステムの任意の場所に展開します。
2.2.1. Circuit Breaker ブースター
Netflix/Hystrix サーキットブレーカーコンポーネントは、ネットワーク接続の中断や、バックエンドサービスの一時的な利用停止に分散アプリケーションが対応できるようにします。サーキットブレーカーパターンの基本概念は、バックエンドサービスが一時的に利用できなくなった場合に、依存するサービスの損失が自動的に検出され、代替動作をプログラムで作成できることです。
Fuse サーキットブローカーブースターは 2 つの関連サービスで設定されます。
- 対象の名前を返す name サービス。
-
名前を取得するために name サービスを呼び出し、文字列
Hello, NAME
を返す greetings サービス。
このデモンストレーションでは、Hystrix サーキットブレーカーは greetings サービスと name サービスとの間に挿入されます。name サービスが利用できなくなると、greetings サービスは name サービスが再起動するまでの間にブロックまたはタイムアウトせずに、代替動作にフォールバックして即座にクライアントに応答することができます。
2.2.1.1. サーキットブレーカーブースターのビルドと実行
Circuit Breaker ミッションの 「ブースタープロジェクトの生成」 の手順に従って、Circuit Breaker ブースタープロジェクトをビルドして実行します。
シェルプロンプトを開き、Maven を使用してコマンドラインからプロジェクトをビルドします。
cd PROJECT_DIR mvn clean package
新しいシェルプロンプトを開き、以下のように name サービスを起動します。
cd name-service mvn spring-boot:run -DskipTests -Dserver.port=8081
Spring Boot が起動すると、以下のような出力が表示されます。
... 2017-12-08 15:44:24.223 INFO 22758 --- [ main] o.a.camel.spring.SpringCamelContext : Total 1 routes, of which 1 are started 2017-12-08 15:44:24.227 INFO 22758 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.20.0 (CamelContext: camel-1) started in 0.776 seconds 2017-12-08 15:44:24.234 INFO 22758 --- [ main] org.jboss.fuse.boosters.cb.Application : Started Application in 4.137 seconds (JVM running for 4.744)
新しいシェルプロンプトを開き、以下のように greetings サービスを起動します。
cd greetings-service mvn spring-boot:run -DskipTests
Spring Boot が起動すると、以下のような出力が表示されます。
... 2017-12-08 15:46:58.521 INFO 22887 --- [ main] o.a.c.c.s.CamelHttpTransportServlet : Initialized CamelHttpTransportServlet[name=CamelServlet, contextPath=] 2017-12-08 15:46:58.524 INFO 22887 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2017-12-08 15:46:58.536 INFO 22887 --- [ main] org.jboss.fuse.boosters.cb.Application : Started Application in 6.263 seconds (JVM running for 6.819)
greetings サービスは、URL
http://localhost:8080/camel/greetings
で REST エンドポイントを公開します。http://localhost:8080 にアクセスします。
このページを開くと、Greeting Service が呼び出されます。
このページには、サーキットブレーカーの状態を監視する Hystrix ダッシュボードへのリンクも提供されます。
Camel Hystrix によって提供されるサーキットブレーカー機能を実証するには、name サービスが実行されているシェルプロンプトウインドウで Ctrl+C を押して、バックエンド name サービスを中止します。
これで name サービスが利用できなくなるため、呼び出されたときに greetings サービスがハングしないよう、サーキットブレーカーが作動します。
Hystrix Monitor ダッシュボードおよび Greeting Service の出力で変更を確認します。
2.2.2. 外部化設定ブースター
Externalized Configuration (外部化設定) ブースターは、Apache Camel ルートの設定を外部化する方法の例を提供します。Spring Boot スタンドアロンデプロイメントでは、設定データは application.properties
ファイルに保存されます。
Fuse on OpenShift デプロイメントでは、設定データは ConfigMap オブジェクトに保存されます。
2.2.2.1. Externalized Configuration ブースターのビルドおよび実行
Externalized Configuration ミッションの 「ブースタープロジェクトの生成」 の手順に従った後、以下のステップに従って Externalized Configuration ブースターをローカルマシンのスタンドアロンプロジェクトとしてビルドおよび実行します。
- プロジェクトをダウンロードし、ローカルファイルシステムでアーカイブを展開します。
プロジェクトをビルドします。
cd PROJECT_DIR mvn clean package
サービスを実行します。
mvn spring-boot:run
Web ブラウザーで http://localhost:8080 を開きます。このページは、5 秒ごとに Greeting Service を呼び出します。Greetings サービスは、
target/classes/application.properties
ファイルからbooster.nameToGreetvalue
を使用して応答します。Greeting Service は default へのグリーティングを 5 秒ごとに出力します。
booster.nameToGreet
の値を変更します。-
エディターで
target/classes/application.properties
ファイルを開きます。 booster.nameToGreetvalue
の値を、default から他の値 (例: Thomas) に変更します。booster.nameToGreetvalue=Thomas
-
エディターで
- ターミナルウィンドウで CTRL+C を押してサービスを停止します。
サービスを再実行します。
mvn spring-boot:run
Web ブラウザーで http://localhost:8080 ページに戻り、Greeting Service の Results ウィンドウで変更された値を確認します。
2.2.3. REST API ブースター
REST API Level 0 のミッションでは、REST フレームワークを使用して、HTTP 経由でリモートプロシージャー呼び出しエンドポイントにビジネスオペレーションをマッピングする方法を示します。このミッションは、Richardson Maturity Model の Level 0 に該当します。
このブースターは、HTTP プロトコルを使用して Apache Camel によって公開されるリモートサービスと対話するメカニズムを導入します。この Fuse ブースターを使用すると、迅速に REST API のプロトタイプを作成し、柔軟に REST API を設定することができます。
このブースターを使用して、以下を行います。
-
camel/greetings/{name}
エンドポイントで HTTP GET 要求を実行します。このリクエストは、ペイロードHello, $name!
を使用して JSON 形式の応答を生成します ($name
は HTTP GET リクエストからの URL パラメーターの値に置き換えられます)。 -
URL
{name}
パラメーターの値を変更すると、変更後の値が応答に反映されます。 - REST API の Swagger ページを表示します。
2.2.3.1. REST API ブースターのビルドおよび実行
REST API ミッションの 「ブースタープロジェクトの生成」 の手順に従って、REST API ブースターをローカルマシンでスタンドアロンプロジェクトとしてビルドおよび実行します。
- プロジェクトをダウンロードし、ローカルファイルシステムでアーカイブを展開します。
プロジェクトをビルドします。
cd PROJECT_DIR mvn clean package
サービスを実行します。
mvn spring-boot:run
- Web ブラウザーで http://localhost:8080 を開きます。
HTTP GET リクエストの例を実行するには、camel/greetings/{name} ボタンをクリックします。
localhost:8080/camel/greetings/Jacopo
URL で新しい Web ブラウザーウインドウが開きます。URL{name}
パラメーターのデフォルト値は Jacopo です。ブラウザーウインドウに JSON 応答が表示されます。
{name} ' パラメーターの値を変更するには、URL を変更します。たとえば、名前を Thomas に変更するには、URL 'localhost:8080/camel/greetings/Thomas
を使用します。ブラウザーウインドウに更新された JSON 応答が表示されます。
REST API の Swagger ページを表示するには、API Swagger ページボタンをクリックします。
ブラウザーウィンドウに API swagger ページが表示されます。