Azure Service Bus 用の Spring Cloud Azure Stream Binder を使用する方法How to use Spring Cloud Azure Stream Binder for Azure Service Bus

重要

この記事の手順を完了するには、Spring Boot 2.0 (以降) が必要です。Spring Boot 2.0 (or later) is required to complete the steps in this article.

Azure には、Azure Service Bus ("Service Bus") という、Advanced Message Queueing Protocol 1.0 ("AMQP 1.0") 標準に基づいた非同期のメッセージング プラットフォームが用意されています。Azure provides an asynchronous messaging platform called Azure Service Bus ("Service Bus") that is based on the Advanced Message Queueing Protocol 1.0 ("AMQP 1.0") standard. Service Bus は、サポートされている Azure プラットフォームの範囲全体で使用することができます。Service Bus can be used across the range of supported Azure platforms.

この記事では、Spring Cloud Stream Binder を使用して Service Bus queues および topics との間でメッセージを送受信する方法について説明します。This article demonstrates how to use the Spring Cloud Stream Binder to send messages to and receive messages from Service Bus queues and topics.

前提条件Prerequisites

この記事の前提条件は次のとおりです。The following prerequisites are required for this article:

  1. Azure サブスクリプションをまだお持ちでない場合は、MSDN サブスクライバーの特典を有効にするか、無料アカウントにサインアップしてください。If you don't already have an Azure subscription, you can activate your MSDN subscriber benefits or sign up for a free account.

  2. サポートされている Java Development Kit (JDK) (バージョン 8 以降)。A supported Java Development Kit (JDK), version 8 or later. Azure での開発時に使用可能な JDK の詳細については、https://aka.ms/azure-jdks を参照してください。For more information about the JDKs available for use when developing on Azure, see https://aka.ms/azure-jdks.

  3. Apache Maven バージョン 3.2 以降。Apache's Maven, version 3.2 or later.

  4. 構成済みの Service Bus キューまたはトピックが既にある場合は、Service Bus 名前空間が次の要件を満たすようにしてください。If you already have a configured Service Bus queue or topic, ensure that the Service Bus namespace meets the following requirements:

    1. すべてのネットワークからのアクセスを許可するAllows access from all networks
    2. Premium (またはそれ以上) であるIs Premium (or higher)
    3. 自分のキューおよびトピックに対する読み取り/書き込みアクセス権限を含んだアクセス ポリシーがあるHas an access policy with read/write access for your queue and topic
  5. 構成済みの Service Bus キューまたはトピックがない場合は、Azure portal を使用して Service Bus キューまたは Service Bus トピックを作成します。If you don't have a configured Service Bus queue or topic, use the Azure portal to create a Service Bus queue or create a Service Bus topic. 前の手順で指定された要件を名前空間が確実に満たすようにしてください。Ensure that the namespace meets the requirements specified in the previous step. また、名前空間に含まれる接続文字列をメモしてください。これは、このチュートリアルのテスト アプリに必要です。Also, make note of the connection string in the namespace as you need it for this tutorial's test app.

  6. Spring Boot アプリケーションがない場合は、Spring Initializr で Maven プロジェクトを作成します。If you don't have a Spring Boot application, create a Maven project with the Spring Initializr. 必ず、 [Maven プロジェクト] を選択し、 [依存関係][Web] 依存関係を追加してください。Remember to select Maven Project and, under Dependencies, add the Web dependency.

Spring Cloud Stream Binder スターターを使用するUse the Spring Cloud Stream Binder starter

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

    C:\SpringBoot\servicebus\pom.xml

    または-or-

    /users/example/home/servicebus/pom.xml

  2. テキスト エディターで pom.xml ファイルを開きます。Open the pom.xml file in a text editor.

  3. Service Bus キューとトピックのどちらを使用しているかに応じて、 <dependencies> 要素に次のコード ブロックを追加します。Add the following code block under the <dependencies> element, depending on whether you're using a Service Bus queue or topic:

    Service Bus キューService Bus queue

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>spring-cloud-azure-servicebus-queue-stream-binder</artifactId>
        <version>1.1.0.RC5</version>
    </dependency>
    

    Service Bus キューの pom.xml ファイルを編集します。

    Service Bus トピックService Bus topic

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>spring-cloud-azure-servicebus-topic-stream-binder</artifactId>
        <version>1.1.0.RC5</version>
    </dependency>
    

    Service Bus トピックの pom.xml ファイルを編集します。

  4. pom.xml ファイルを保存して閉じます。Save and close the pom.xml file.

アプリでサービス バス用の構成を行うConfigure the app for your service bus

接続文字列または資格情報ファイルに基づいて、自分のアプリを構成できます。You can configure your app based on either the connection string or a credentials file. このチュートリアルでは、接続文字列を使用します。This tutorial uses a connection string. 資格情報ファイルの使用の詳細については、「Service Bus キュー用 Spring Cloud Azure Stream Binder のコード サンプル」と「Service Bus トピック用 Spring Cloud Azure Stream Binder のコード サンプル」を参照してください。For more information about using credential files, see the Spring Cloud Azure Stream Binder for Service Bus queue Code Sample and Spring Cloud Azure Stream Binder for Service Bus topic Code Sample.

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

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

    または-or-

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

  2. テキスト エディターで application.properties ファイルを開きます。Open the application.properties file in a text editor.

  3. Service Bus キューとトピックのどちらを使用しているかに応じて、application.properties ファイルの最後に適切なコードを追加します。Append the appropriate code to the end of the application.properties file depending on whether you're using a Service Bus queue or topic. 「フィールドの説明」の表を使用して、サンプルの値を、実際のサービス バスの適切なプロパティに置き換えてください。Use the Field descriptions table to replace the sample values with the appropriate properties for your service bus.

    Service Bus キューService Bus queue

    spring.cloud.azure.servicebus.connection-string=<ServiceBusNamespaceConnectionString>
    spring.cloud.stream.bindings.input.destination=examplequeue
    spring.cloud.stream.bindings.output.destination=examplequeue
    spring.cloud.stream.servicebus.queue.bindings.input.consumer.checkpoint-mode=MANUAL
    

    Service Bus トピックService Bus topic

    spring.cloud.azure.servicebus.connection-string=<ServiceBusNamespaceConnectionString>
    spring.cloud.stream.bindings.input.destination=exampletopic
    spring.cloud.stream.bindings.input.group=examplesubscription
    spring.cloud.stream.bindings.output.destination=exampletopic
    spring.cloud.stream.servicebus.topic.bindings.input.consumer.checkpoint-mode=MANUAL
    

    フィールドの説明Field descriptions

    フィールドField 説明Description
    spring.cloud.azure.servicebus.connection-string Azure portal の自分の Service Bus 名前空間で取得した接続文字列を指定します。Specify the connection string you obtained in your Service Bus namespace from the Azure portal.
    spring.cloud.stream.bindings.input.destination このチュートリアルで自分が使用した Service Bus キューまたは Service Bus トピックを指定します。Specify the Service Bus queue or Service Bus topic you used in this tutorial.
    spring.cloud.stream.bindings.input.group Service Bus トピックを使用した場合は、トピックのサブスクリプションを指定します。If you used a Service Bus topic, specify the topic subscription.
    spring.cloud.stream.bindings.output.destination 入力先に使用したものと同じ値を指定します。Specify the same value used for input destination.
    spring.cloud.stream.servicebus.queue.bindings.input.consumer.checkpoint-mode MANUAL を指定します。Specify MANUAL.
    spring.cloud.stream.servicebus.topic.bindings.input.consumer.checkpoint-mode MANUAL を指定します。Specify MANUAL.
  4. application.properties ファイルを保存して閉じます。Save and close the application.properties file.

基本的な Service Bus 機能を実装するImplement basic Service Bus functionality

このセクションでは、自分のサービス バスにメッセージを送信するために必要な Java クラスを作成します。In this section, you create the necessary Java classes for sending messages to your service bus.

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

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

    C:\SpringBoot\servicebus\src\main\java\com\example\ServiceBusBinderApplication.java

    または-or-

    /users/example/home/servicebus/src/main/java/com/example/ServiceBusBinderApplication.java

  2. テキスト エディターでメイン アプリケーションの Java ファイルを開きます。Open the main application Java file in a text editor.

  3. 次のコードをファイルに追加します。Add the following code to the file:

    package com.example;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ServiceBusBinderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceBusBinderApplication.class, args);
        }
    }
    
  4. ファイルを保存して閉じます。Save and close the file.

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

  1. テキスト エディターを使用して、StreamBinderSource.java という名前の Java ファイルを自分のアプリのパッケージ ディレクトリに作成します。Using a text editor, create a Java file named StreamBinderSource.java in the package directory of your app.

  2. この新しいファイルに次のコードを追加します。Add the following code to the new file:

    package com.example;
    
    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.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @EnableBinding(Source.class)
    @RestController
    public class StreamBinderSource {
    
        @Autowired
        private Source source;
    
        @PostMapping("/messages")
        public String postMessage(@RequestParam String message) {
            this.source.output().send(new GenericMessage<>(message));
            return message;
        }
    }
    
  3. StreamBinderSources.java ファイルを保存して閉じます。Save and close the StreamBinderSources.java file.

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

  1. テキスト エディターを使用して、StreamBinderSink.java という名前の Java ファイルを自分のアプリのパッケージ ディレクトリに作成します。Using a text editor, create a Java file named StreamBinderSink.java in the package directory of your app.

  2. この新しいファイルに次のコード行を追加します。Add the following lines of code to the new file:

    package com.example;
    
    import com.microsoft.azure.spring.integration.core.AzureHeaders;
    import com.microsoft.azure.spring.integration.core.api.Checkpointer;
    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 StreamBinderSink {
    
        @StreamListener(Sink.INPUT)
        public void handleMessage(String message, @Header(AzureHeaders.CHECKPOINTER) Checkpointer checkpointer) {
            System.out.println(String.format("New message received: '%s'", message));
            checkpointer.success().handle((r, ex) -> {
                if (ex == null) {
                    System.out.println(String.format("Message '%s' successfully checkpointed", message));
                }
                return null;
            });
        }
    }
    
  3. StreamBinderSink.java ファイルを保存して閉じます。Save and close the StreamBinderSink.java file.

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

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

  2. ディレクトリを自分の pom.xml ファイルの保存先に変更します。例:Change the directory to the location of your pom.xml file; for example:

    cd C:\SpringBoot\servicebus

    または-or-

    cd /users/example/home/servicebus

  3. 自分の Spring Boot アプリケーションを Maven でビルドし、実行します。Build your Spring Boot application with Maven and run it:

    mvn clean spring-boot:run
    
  4. 自分のアプリケーションが実行されたら、curl を使用してアプリケーションをテストできます。Once your application is running, you can use curl to test your application:

    curl -X POST localhost:8080/messages?message=hello
    

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

    New message received: 'hello'
    Message 'hello' successfully checkpointed
    

リソースのクリーンアップClean up resources

予想外の課金を防ぐために、この記事で作成したリソースが不要になったら、Azure portal を使用して削除してください。When no longer needed, use the Azure portal to delete the resources created in this article to avoid unexpected charges.

次の手順Next steps