Azure Event Hubs を使用する Spring Cloud Stream Binder アプリケーションを作成する方法How to create a Spring Cloud Stream Binder application with Azure Event Hubs

概要Overview

この記事では、Spring Boot Initializr を使用して作成された Java ベースの Spring Cloud Stream Binder アプリケーションを、Azure Event Hubs を使用するように構成する方法について説明します。This article demonstrates how to configure a Java-based Spring Cloud Stream Binder application created with the Spring Boot Initializer with Azure Event Hubs.

前提条件Prerequisites

この記事の手順に従うには、次の前提条件が必要です。The following prerequisites are required in order to follow the steps in this article:

重要

この記事の手順を完了するには、Spring Boot 2.0 以上のバージョンが必要です。Spring Boot version 2.0 or greater is required to complete the steps in this article.

Azure portal を使用して Azure イベント ハブを作成するCreate an Azure Event Hub using the Azure portal

Azure イベント ハブの名前空間を作成するCreate an Azure Event Hub Namespace

  1. Azure portal (https://portal.azure.com/) を参照し、サインインします。Browse to the Azure portal at https://portal.azure.com/ and sign in.

  2. [+ リソースの作成] をクリックし、 [モノのインターネット][Event Hubs] の順にクリックします。Click +Create a resource, then Internet of Things, and then click Event Hubs.

    Azure イベント ハブの名前空間を作成する

  3. [名前空間の作成] ページで、次の情報を入力します。On the Create Namespace page, enter the following information:

    • 一意の名前を入力します。この名前は、イベント ハブの名前空間の URI の一部になります。Enter a unique Name, which will become part of the URI for your event hub namespace. たとえば、 [名前] に「wingtiptoys」と入力した場合、URI は wingtiptoys.servicebus.windows.net になります。For example: if you entered wingtiptoys for the Name, the URI would be wingtiptoys.servicebus.windows.net.
    • イベント ハブの名前空間の価格レベルを選択します。Choose a Pricing tier for your event hub namespace.
    • 名前空間に使用するサブスクリプションを選択します。Choose the Subscription you want to use for your namespace.
    • 名前空間の新しいリソース グループを作成するか、既存のリソース グループを選択するかを指定します。Specify whether to create a new Resource group for your namespace, or choose an existing resource group.
    • イベント ハブの名前空間の場所を指定します。Specify the Location for your event hub namespace.

    Azure イベント ハブの名前空間のオプションを指定する

  4. 上記のオプションを指定したら、 [作成] をクリックして名前空間を作成します。When you have specified the options listed above, click Create to create your namespace.

名前空間に Azure イベント ハブを作成するCreate an Azure Event Hub in your namespace

  1. Azure portal (https://portal.azure.com/) を参照します。Browse to the Azure portal at https://portal.azure.com/.

  2. [すべてのリソース] をクリックし、作成した名前空間をクリックします。Click All resources, and then click the namespace that you created.

    Azure イベント ハブの名前空間を選択する

  3. [Event Hubs] をクリックし、 [+ イベント ハブ] をクリックします。Click Event Hubs, and then click +Event Hub.

    新しい Azure イベント ハブを追加する

  4. [イベント ハブの作成] ページで、イベント ハブの一意の名前を入力し、 [作成] をクリックします。On the Create Event Hub page, enter a unique Name for your Event Hub, and then click Create.

    Azure Event Hub の作成

  5. イベント ハブが作成されると、 [Event Hubs] ページに表示されます。When your Event Hub has been created, it will be listed on the Event Hubs page.

    Azure Event Hub の作成

イベント ハブのチェックポイント用の Azure ストレージ アカウントを作成するCreate an Azure Storage Account for your Event Hub checkpoints

  1. Azure portal (https://portal.azure.com/) を参照します。Browse to the Azure portal at https://portal.azure.com/.

  2. [+ リソースの作成] をクリックし、 [Storage][ストレージ アカウント] の順にクリックします。Click +Create a resource, then Storage, and then click Storage Account.

    Azure ストレージ アカウントを作成する

  3. [名前空間の作成] ページで、次の情報を入力します。On the Create Namespace page, enter the following information:

    • 一意の名前を入力します。この名前は、ストレージ アカウントの URI の一部になります。Enter a unique Name, which will become part of the URI for your storage account. たとえば、 [名前] に「wingtiptoys」と入力した場合、URI は wingtiptoys.core.windows.net になります。For example: if you entered wingtiptoys for the Name, the URI would be wingtiptoys.core.windows.net.
    • [アカウントの種類][Blob Storage] を選択します。Choose Blob storage for the Account kind.
    • ストレージ アカウントの場所を指定します。Specify the Location for your storage account.
    • ストレージ アカウントに使用するサブスクリプションを選択します。Choose the Subscription you want to use for your storage account.
    • ストレージ アカウントの新しいリソース グループを作成するか、既存のリソース グループを選択するかを指定します。Specify whether to create a new Resource group for your storage account, or choose an existing resource group.

    Azure ストレージ アカウントのオプションを指定する

  4. 上記のオプションを指定したら、 [作成] をクリックしてストレージ アカウントを作成します。When you have specified the options listed above, click Create to create your storage account.

Spring Initializr でシンプルな Spring Boot アプリケーションを作成するCreate a simple Spring Boot application with the Spring Initializr

  1. https://start.spring.io/ を参照します。Browse to https://start.spring.io/.

  2. 次のオプションを指定します。Specify the following options:

    • JavaMaven プロジェクトを生成します。Generate a Maven project with Java.

    • Spring Boot のバージョンとして、2.0 以上を指定します。Specify a Spring Boot version that is equal to or greater than 2.0.

    • アプリケーションのグループ (Group)成果物 (Artifact) の名前を指定します。Specify the Group and Artifact names for your application.

    • Web 依存関係を追加します。Add the Web dependency.

      基本的な Spring Initializr オプション

    注意

    Spring Initializr では、グループ (Group)成果物 (Artifact) の名前を使用してパッケージ名を作成します (例: com.wingtiptoys.eventhub)。The Spring Initializr uses the Group and Artifact names to create the package name; for example: com.wingtiptoys.eventhub.

  3. 上記のオプションを指定したら、 [Generate Project](プロジェクトの生成) をクリックします。When you have specified the options listed above, click Generate Project.

  4. メッセージが表示されたら、ローカル コンピューター上のパスにプロジェクトをダウンロードします。When prompted, download the project to a path on your local computer.

    Spring プロジェクトをダウンロードする

  5. ファイルをローカル システム上に展開したら、シンプルな Spring Boot アプリケーションの編集を開始できます。After you have extracted the files on your local system, your simple Spring Boot application will be ready for editing.

Azure Event Hub スターターを使用するように Spring Boot アプリを構成するConfigure your Spring Boot app to use the Azure Event Hub starter

  1. アプリのルート ディレクトリで pom.xml ファイルを探します。次に例を示します。Locate the pom.xml file in the root directory of your app; for example:

    C:\SpringBoot\eventhub\pom.xml

    または-or-

    /users/example/home/eventhub/pom.xml

  2. テキスト エディターで pom.xml ファイルを開き、Spring Cloud Azure Event Hub Stream Binder スターターを <dependencies> のリストに追加します。Open the pom.xml file in a text editor, and add the Spring Cloud Azure Event Hub Stream Binder starter to the list of <dependencies>:

    <dependency>
       <groupId>com.microsoft.azure</groupId>
       <artifactId>spring-cloud-azure-eventhubs-stream-binder</artifactId>
       <version>1.1.0.RC2</version>
    </dependency>
    
  3. pom.xml ファイルを保存して閉じます。Save and close the pom.xml file.

Azure 資格情報ファイルを作成するCreate an Azure Credential File

  1. コマンド プロンプトを開きます。Open a command prompt.

  2. Spring Boot アプリの resources ディレクトリに移動します。次に例を示します。Navigate to the resources directory of your Spring Boot app; for example:

    cd C:\SpringBoot\eventhub\src\main\resources
    

    または-or-

    cd /users/example/home/eventhub/src/main/resources
    
  3. Azure アカウントにサインインします。Sign in to your Azure account:

    az login
    
  4. サブスクリプションを一覧表示します。List your subscriptions:

    az account list
    

    Azure からサブスクリプションの一覧が返されます。使用するサブスクリプションの GUID をコピーする必要があります。次に例を示します。Azure will return a list of your subscriptions, and you will need to copy the GUID for the subscription that you want to use; for example:

    [
      {
        "cloudName": "AzureCloud",
        "id": "11111111-1111-1111-1111-111111111111",
        "isDefault": true,
        "name": "Converted Windows Azure MSDN - Visual Studio Ultimate",
        "state": "Enabled",
        "tenantId": "22222222-2222-2222-2222-222222222222",
        "user": {
          "name": "gena.soto@wingtiptoys.com",
          "type": "user"
        }
      }
    ]
    
  5. Azure で使用するサブスクリプションの GUID を指定します。次に例を示します。Specify the GUID for the subscription you want to use with Azure; for example:

    az account set -s 11111111-1111-1111-1111-111111111111
    
  6. Azure 資格情報ファイルを作成します。Create your Azure Credential file:

    az ad sp create-for-rbac --sdk-auth > my.azureauth
    

    このコマンドにより、resources ディレクトリに、次の例のような内容の my.azureauth ファイルが作成されます。This command will create a my.azureauth file in your resources directory with contents that resemble the following example:

    {
      "clientId": "33333333-3333-3333-3333-333333333333",
      "clientSecret": "44444444-4444-4444-4444-444444444444",
      "subscriptionId": "11111111-1111-1111-1111-111111111111",
      "tenantId": "22222222-2222-2222-2222-222222222222",
      "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
      "resourceManagerEndpointUrl": "https://management.azure.com/",
      "activeDirectoryGraphResourceId": "https://graph.windows.net/",
      "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
      "galleryEndpointUrl": "https://gallery.azure.com/",
      "managementEndpointUrl": "https://management.core.windows.net/"
    }
    

Azure イベント ハブを使用するように Spring Boot アプリを構成するConfigure your Spring Boot app to use your Azure Event Hub

  1. アプリの resources ディレクトリで application.properties を探します。次に例を示します。Locate the application.properties in the resources directory of your app; for example:

    C:\SpringBoot\eventhub\src\main\resources\application.properties

    または-or-

    /users/example/home/eventhub/src/main/resources/application.properties

  2. テキスト エディターで application.properties ファイルを開きます。次の行を追加し、サンプルの値をイベント ハブの適切なプロパティに置き換えます。Open the application.properties file in a text editor, add the following lines, and then replace the sample values with the appropriate properties for your event hub:

    spring.cloud.azure.credential-file-path=my.azureauth
    spring.cloud.azure.resource-group=wingtiptoysresources
    spring.cloud.azure.region=West US
    spring.cloud.azure.eventhub.namespace=wingtiptoysnamespace
    spring.cloud.azure.eventhub.checkpoint-storage-account=wingtiptoysstorage
    spring.cloud.stream.bindings.input.destination=wingtiptoyshub
    spring.cloud.stream.bindings.input.group=$Default
    spring.cloud.stream.bindings.output.destination=wingtiptoyshub
    spring.cloud.stream.eventhub.bindings.input.consumer.checkpoint-mode=MANUAL
    

    各値の説明:Where:

    フィールドField 説明Description
    spring.cloud.azure.credential-file-path このチュートリアルで作成した Azure 資格情報ファイルを指定します。Specifies Azure credential file that you created earlier in this tutorial.
    spring.cloud.azure.resource-group Azure イベント ハブを含む Azure リソース グループを指定します。Specifies the Azure Resource Group that contains your Azure Event Hub.
    spring.cloud.azure.region Azure イベント ハブの作成時に指定した地理的リージョンを指定します。Specifies the geographical region that you specified when you created your Azure Event Hub.
    spring.cloud.azure.eventhub.namespace Azure イベント ハブの名前空間の作成時に指定した一意の名前を指定します。Specifies the unique name that you specified when you created your Azure Event Hub Namespace.
    spring.cloud.azure.eventhub.checkpoint-storage-account このチュートリアルで作成した Azure ストレージ アカウントを指定します。Specifies Azure Storage Account that you created earlier in this tutorial.
    spring.cloud.stream.bindings.input.destination 入力先の Azure イベント ハブを指定します。ここでは、このチュートリアルで作成したハブを指定します。Specifies the input destination Azure Event Hub, which for this tutorial is the hub you created earlier in this tutorial.
    spring.cloud.stream.bindings.input.group Azure イベント ハブのコンシューマー グループを指定します。Azure イベント ハブの作成時に作成された基本コンシューマー グループを使用するには、"$ Default" に設定します。Specifies a Consumer Group from Azure Event Hub, which can be set to '$Default' in order to use the basic consumer group that was created when you created your Azure Event Hub.
    spring.cloud.stream.bindings.output.destination 出力先の Azure イベント ハブを指定します。ここでは、入力先と同じものになります。Specifies the output destination Azure Event Hub, which for this tutorial will be the same as the input destination.
  3. application.properties ファイルを保存して閉じます。Save and close the application.properties file.

イベント ハブの基本的な機能を実装するサンプル コードを追加するAdd sample code to implement basic event hub functionality

このセクションでは、イベント ハブにイベントを送信するために必要な Java クラスを作成します。In this section, you create the necessary Java classes for sending events to your event hub.

アプリケーションのメイン クラスを変更するModify the main application class

  1. アプリのパッケージ ディレクトリでメイン アプリケーションの Java ファイルを探します。次に例を示します。Locate the main application Java file in the package directory of your app; for example:

    C:\SpringBoot\eventhub\src\main\java\com\wingtiptoys\eventhub\EventhubApplication.java

    または-or-

    /users/example/home/eventhub/src/main/java/com/wingtiptoys/eventhub/EventhubApplication.java

  2. テキスト エディターでメイン アプリケーションの Java ファイルを開き、ファイルに次の行を追加します。Open the main application Java file in a text editor, and add the following lines to the file:

    package com.wingtiptoys.eventhub;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class EventhubApplication {
       public static void main(String[] args) {
          SpringApplication.run(EventhubApplication.class, args);
       }
    }
    
  3. メイン アプリケーションの Java ファイルを保存して閉じます。Save and close the main application Java file.

ソース コネクタの新しいクラスを作成するCreate a new class for the source connector

  1. アプリのパッケージ ディレクトリに EventhubSource.java という名前の新しい Java ファイルを作成し、テキスト エディターでファイルを開いて、次の行を追加します。Create a new Java file named EventhubSource.java in the package directory of your app, then open the file in a text editor and add the following lines:

    package com.wingtiptoys.eventhub;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.stream.annotation.EnableBinding;
    import org.springframework.cloud.stream.messaging.Source;
    import org.springframework.messaging.support.GenericMessage;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    
    @EnableBinding(Source.class)
    @RestController
    public class EventhubSource {
    
       @Autowired
       private Source source;
    
       @PostMapping("/messages")
       public String postMessage(@RequestBody String message) {
          this.source.output().send(new GenericMessage<>(message));
          return message;
       }
    }
    
  2. EventhubSource.java ファイルを保存して閉じます。Save and close the EventhubSource.java file.

シンク コネクタの新しいクラスを作成するCreate a new class for the sink connector

  1. アプリのパッケージ ディレクトリに EventhubSink.java という名前の新しい Java ファイルを作成し、テキスト エディターでファイルを開いて、次の行を追加します。Create a new Java file named EventhubSink.java in the package directory of your app, then open the file in a text editor and add the following lines:

    package com.wingtiptoys.eventhub;
    
    import com.microsoft.azure.spring.integration.core.AzureHeaders;
    import com.microsoft.azure.spring.integration.core.api.Checkpointer;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.cloud.stream.annotation.EnableBinding;
    import org.springframework.cloud.stream.annotation.StreamListener;
    import org.springframework.cloud.stream.messaging.Sink;
    import org.springframework.messaging.handler.annotation.Header;
    
    @EnableBinding(Sink.class)
    public class EventhubSink {
    
       private static final Logger LOGGER = LoggerFactory.getLogger(EventhubSink.class);
    
       @StreamListener(Sink.INPUT)
       public void handleMessage(String message, @Header(AzureHeaders.CHECKPOINTER) Checkpointer checkpointer) {
          LOGGER.info("New message received: '{}'", message);
          checkpointer.success().handle((r, ex) -> {
             if (ex == null) {
                LOGGER.info("Message '{}' successfully checkpointed", message);
             }
             return null;
          });
       }
    }
    
  2. EventhubSink.java ファイルを保存して閉じます。Save and close the EventhubSink.java file.

アプリケーションをビルドしてテストするBuild and test your application

  1. コマンド プロンプトを開き、ディレクトリを pom.xml ファイルが置かれているフォルダーに変更します。次に例を示します。Open a command prompt and change directory to the folder where your pom.xml file is located; for example:

    cd C:\SpringBoot\eventhub

    または-or-

    cd /users/example/home/eventhub

  2. Spring Boot アプリケーションを Maven でビルドし、実行します。次に例を示します。Build your Spring Boot application with Maven and run it; for example:

    mvn clean package
    mvn spring-boot:run
    
  3. アプリケーションが実行されたら、curl を使用してアプリケーションをテストできます。次に例を示します。Once your application is running, you can use curl to test your application; for example:

    curl -X POST -H "Content-Type: text/plain" -d "hello" http://localhost:8080/messages
    

    アプリケーションのログに送信された "hello" が表示されます。You should see "hello" posted to your application's logs. 例:For example:

    [Thread-13] INFO com.wingtiptoys.eventhub.EventhubSink - New message received: 'hello'
    [pool-10-thread-7] INFO com.wingtiptoys.eventhub.EventhubSink - Message 'hello' successfully checkpointed
    

次の手順Next steps

Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。To learn more about Spring and Azure, continue to the Spring on Azure documentation center.

その他のリソースAdditional Resources

Azure による Event Hub Stream Binder のサポートの詳細については、次の記事をご覧ください。For more information about Azure support for Event Hub Stream Binder, see the following articles:

Java での Azure の使用の詳細については、「Java 開発者向けの Azure」および「Azure DevOps と Java の操作」を参照してください。For more information about using Azure with Java, see the Azure for Java Developers and the Working with Azure DevOps and Java.

Spring Framework は Java 開発者のエンタープライズ レベルのアプリケーション作成を支援するオープンソース ソリューションです。The Spring Framework is an open-source solution that helps Java developers create enterprise-level applications. このプラットフォームで構築される特に知られたプロジェクトの 1 つが Spring Boot です。これによって、スタンドアロンの Java アプリケーションの作成方法が簡略化されます。One of the more-popular projects that is built on top of that platform is Spring Boot, which provides a simplified approach for creating stand-alone Java applications. Spring Boot を使い始めた開発者を支援するために、https://github.com/spring-guides/ では、サンプルの Spring Boot パッケージがいくつか用意されています。To help developers get started with Spring Boot, several sample Spring Boot packages are available at https://github.com/spring-guides/. 基本的な Spring Boot プロジェクトの一覧から選択するだけでなく、 Spring Initializr は、開発者がカスタム Spring Boot アプリケーションの作成を開始できるように支援します。In addition to choosing from the list of basic Spring Boot projects, the Spring Initializr helps developers get started with creating custom Spring Boot applications.