第1章 Fuse on Spring Boot の使用

Spring Boot で Fuse アプリケーションを開発するには、最初に Spring Boot で実行する Fuse のサンプルブースタープロジェクトを生成およびビルドします。詳細は以下を参照してください。

1.1. Fuse on Spring Boot

Spring Boot はよく知られる Spring コンテナーがさらに進化したものです。Spring Boot コンテナーの特徴は、コンテナー機能が独立してデプロイできる小さなチャンクに分割されていることです。これにより、特定のサービスに特化し、小さなフットプリントでコンテナーをデプロイできます。これは、マイクロサービスアーキテクチャーのパラダイムに対応するために必要になります。

このコンテナー技術の特徴は次のとおりです。

  • 特に、スケーラブルなクラウドプラットフォーム (Kubernetes および OpenShift) での実行に適しています。
  • マイクロサービスアーキテクチャーに適した小さなフットプリント。
  • 設定より規約」向けに最適化されています。
  • アプリケーションサーバーは必要ありません。Spring Boot アプリケーション Jar を直接 JVM で実行できます。

1.2. ブースタープロジェクトの生成

Fuse ブースタープロジェクトは、スタンドアロンアプリケーションの実行を手助けする開発者向けのプロジェクトです。ここでは、ブースタープロジェクトの 1 つである Circuit Breaker ブースターの生成手順を説明します。この演習では、Fuse on Spring Boot の便利なコンポーネントを使用します。

Netflix/Hystrix サーキットブレーカーは、ネットワーク接続の中断や、バックエンドサービスの一時的な利用停止に分散アプリケーションが対応できるようにします。サーキットブレーカーパターンの基本概念は、バックエンドサービスが一時的に利用できなくなった場合に、依存するサービスの損失が自動的に検出され、代替動作をプログラムで作成できることです。

Fuse サーキットブローカーブースターは 2 つの関連サービスで構成されます。

  • 呼び名を返すバックエンドサービスである name サービス。
  • 名前を取得するよう name サービスを呼び出し、文字列 Hello, NAME を返すフロントエンドサービスである greetings サービス。

このブースターデモンストレーションでは、Hystrix サーキットブレーカーは greetings サービスと name サービスとの間に挿入されます。バックエンドの name サービスが利用できなくなると、name サービスが再起動するまでの間に greetings サービスはブロックされず、 greetings サービスは代替動作にフォールバックして即座にクライアントに応答します。

前提条件

手順

  1. https://developers.redhat.com/launch に移動します。
  2. START をクリックします。

    ランチャーウィザードによって、Red Hat アカウントにログインするよう要求されます。

  3. Log in or register ボタンをクリックし、ログインします。
  4. Launcher ページで Deploy an Example Application ボタンをクリックします。
  5. Create Example Application ページで Create Example Application as フィールドに名前 fuse-circuit-breaker を入力します。
  6. Select an Example をクリックします。
  7. Example ダイアログで、Circuit Breaker オプションを選択します。Select a Runtime ドロップダウンメニューが表示されます。

    1. Select a Runtime ドロップダウンメニューで Fuse を選択します。
    2. バージョンのドロップダウンメニューで 7.3.0 (Red Hat Fuse) を選択します。2.21.2 (Community) バージョンは選択しないでください。
    3. Save をクリックします。
  8. Create Example Application ページで Download をクリックします。
  9. Your Application is Ready ダイアログが表示されたら、Download.zip をクリックします。ブラウザーが生成されたブースタープロジェクト (ZIP ファイルとしてパッケージ) をダウンロードします。
  10. アーカイブユーティリティーを使用して、生成されたプロジェクトをローカルファイルシステムの任意の場所に展開します。

1.3. ブースタープロジェクトのビルド

これらの手順は、Fuse on Spring Boot で Circuit Breaker ブースターをビルドする方法を説明します。

前提条件

手順

  1. シェルプロンプトを開き、Maven を使用してコマンドラインからプロジェクトをビルドします。

    cd fuse-circuit-breaker
    mvn clean package

    Maven によってプロジェクトがビルドされた後、Build Success メッセージが表示されます。

  2. 新しいシェルプロンプトを開き、以下のように name サービスを起動します。

    cd name-service
    mvn spring-boot:run -DskipTests -Dserver.port=8081

    Spring Boot が起動すると、以下のような出力が表示されます。

    ...
    2019-05-06 20:19:59.401  INFO 9553 --- [           main] o.a.camel.spring.SpringCamelContext      : Route: route1 started and consuming from: servlet:/name?httpMethodRestrict=GET
    2019-05-06 20:19:59.402  INFO 9553 --- [           main] o.a.camel.spring.SpringCamelContext      : Total 1 routes, of which 1 are started
    2019-05-06 20:19:59.403  INFO 9553 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.21.0.fuse-730078-redhat-00001 (CamelContext: camel-1) started in 0.287 seconds
    2019-05-06 20:19:59.406  INFO 9553 --- [           main] o.a.c.c.s.CamelHttpTransportServlet      : Initialized CamelHttpTransportServlet[name=CamelServlet, contextPath=]
    2019-05-06 20:19:59.473  INFO 9553 --- [           main] b.c.e.u.UndertowEmbeddedServletContainer : Undertow started on port(s) 8081 (http)
    2019-05-06 20:19:59.479  INFO 9553 --- [           main] com.redhat.fuse.boosters.cb.Application  : Started Application in 5.485 seconds (JVM running for 9.841)
  3. 新しいシェルプロンプトを開き、以下のように greetings サービスを起動します。

    cd greetings-service
    mvn spring-boot:run -DskipTests

    Spring Boot が起動すると、以下のような出力が表示されます。

    ...
    2019-05-06 20:22:19.051  INFO 9729 --- [           main] o.a.c.c.s.CamelHttpTransportServlet      : Initialized CamelHttpTransportServlet[name=CamelServlet, contextPath=]
    2019-05-06 20:22:19.115  INFO 9729 --- [           main] b.c.e.u.UndertowEmbeddedServletContainer : Undertow started on port(s) 8080 (http)
    2019-05-06 20:22:19.123  INFO 9729 --- [           main] com.redhat.fuse.boosters.cb.Application  : Started Application in 7.68 seconds (JVM running for 12.66)

    greetings サービスは http://localhost:8080/camel/greetings URL で REST エンドポイントを公開します。

  4. web ブラウザーで URL を開くか、別のシェルプロンプトで以下の curl コマンドを入力して、REST エンドポイントを呼び出します。

    curl http://localhost:8080/camel/greetings

    応答は次のとおりです。

    {"greetings":"Hello, Jacopo"}
  5. Camel Hystrix によって提供されるサーキットブレーカー機能を実証するには、name サービスが実行されているシェルプロンプトウインドウで Ctrl-C を入力し、バックエンド name サービスを中止します。

    これで name サービスが利用できなくなるため、呼び出されたときに greetings サービスがハングしないよう、サーキットブレーカーが作動します。

  6. web ブラウザーで http://localhost:8080/camel/greetings を開くか、別のシェルプロンプトウインドウに以下の curl コマンドを入力して、greetings REST エンドポイントを呼び出します。

    curl http://localhost:8080/camel/greetings

    応答は次のとおりです。

    {"greetings":"Hello, default fallback"}

    greetings サービスが実行されているウインドウで、ログが以下のメッセージシーケンスを表示します。

    2019-05-06 20:24:16.952  INFO 9729 --- [-CamelHystrix-2] route2                                   :  Try to call name Service
    2019-05-06 20:24:16.956  INFO 9729 --- [-CamelHystrix-2] o.a.c.httpclient.HttpMethodDirector      : I/O exception (java.net.ConnectException) caught when processing request: Connection refused (Connection refused)
    2019-05-06 20:24:16.956  INFO 9729 --- [-CamelHystrix-2] o.a.c.httpclient.HttpMethodDirector      : Retrying request
    2019-05-06 20:24:16.957  INFO 9729 --- [-CamelHystrix-2] o.a.c.httpclient.HttpMethodDirector      : I/O exception (java.net.ConnectException) caught when processing request: Connection refused (Connection refused)
    2019-05-06 20:24:16.957  INFO 9729 --- [-CamelHystrix-2] o.a.c.httpclient.HttpMethodDirector      : Retrying request
    2019-05-06 20:24:16.957  INFO 9729 --- [-CamelHystrix-2] o.a.c.httpclient.HttpMethodDirector      : I/O exception (java.net.ConnectException) caught when processing request: Connection refused (Connection refused)
    2019-05-06 20:24:16.957  INFO 9729 --- [-CamelHystrix-2] o.a.c.httpclient.HttpMethodDirector      : Retrying request
    2019-05-06 20:24:16.964  INFO 9729 --- [-CamelHystrix-2] route2                                   :  We are falling back!!!!
  7. この例に関する詳細は、greetings-service の実行中に http://localhost:8080/Circuit Breaker - Red Hat Fuse ページを開いてください。このページには、サーキットブレーカーの状態を監視する Hystrix ダッシュボードへのリンクが含まれます。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。