Azure Service Bus JMS 用の Spring Boot スターターの使用方法How to use the Spring Boot Starter for Azure Service Bus JMS

重要

この記事の手順を完了するには、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.

Azure Service Bus JMS 用の Spring Boot スターターを使用すると、Spring と Service Bus を統合することができます。The Spring Boot Starter for Azure Service Bus JMS provides Spring integration with Service Bus.

この記事では、Azure Service Bus JMS 用の Spring Boot スターターを使用して、Service Bus の queues および topics との間でメッセージを送受信する方法について説明します。This article demonstrates how to use Spring Boot Starter for Azure Service Bus JMS 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 Initializer で Maven プロジェクトを作成します。If you don't have a Spring Boot application, create a Maven project with the Spring Initializer. 必ず、 [Maven プロジェクト] を選択し、 [依存関係][Web] 依存関係を追加してください。Remember to select Maven Project and, under Dependencies, add the Web dependency.

Azure Service Bus JMS スターターを使用するUse the Azure Service Bus JMS 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. Spring Boot Azure Service Bus JMS スターターを <dependencies> のリストに追加します。Add the Spring Boot Azure Service Bus JMS starter to the list of <dependencies>:

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-servicebus-jms-spring-boot-starter</artifactId>
        <version>2.1.7</version>
    </dependency>
    

    pom.xml ファイルに dependency セクションを追加します。

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

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

このセクションでは、Service Bus キューまたはトピックを使用するように自分のアプリを構成する方法について確認します。In this section, you see how to configure your app to use either a Service Bus queue or topic.

Service Bus キューを使用するUse a Service Bus queue

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

    C:\SpringBoot\servicebus\application.properties

    または-or-

    /users/example/home/servicebus/application.properties

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

  3. application.properties ファイルの最後に次のコードを追加します。Append the following code to the end of the application.properties file. サンプルの値は、実際のサービス バスの適切な値に置き換えてください。Replace the sample values with the appropriate values for your service bus:

    spring.jms.servicebus.connection-string=<ServiceBusNamespaceConnectionString>
    spring.jms.servicebus.idle-timeout=<IdleTimeout>
    

    フィールドの説明Field descriptions

    フィールドField 説明Description
    spring.jms.servicebus.connection-string Azure portal の自分の Service Bus 名前空間で取得した接続文字列を指定します。Specify the connection string you obtained in your Service Bus namespace from the Azure portal.
    spring.jms.servicebus.idle-timeout アイドル タイムアウトをミリ秒単位で指定します。Specify the idle timeout in milliseconds. このチュートリアルで推奨される値は 1800000 です。The recommended value for this tutorial is 1800000.
  4. application.properties ファイルを保存して閉じます。Save and close the application.properties file.

Service Bus トピックを使用するUse Service Bus topic

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

    C:\SpringBoot\servicebus\application.properties

    または-or-

    /users/example/home/servicebus/application.properties

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

  3. application.properties ファイルの最後に次のコードを追加します。Append the following code to the end of the application.properties file. サンプルの値は、実際のサービス バスの適切な値に置き換えてください。Replace the sample values with the appropriate values for your service bus:

    spring.jms.servicebus.connection-string=<ServiceBusNamespaceConnectionString>
    spring.jms.servicebus.topic-client-id=<ServiceBusTopicClientId>
    spring.jms.servicebus.idle-timeout=<IdleTimeout>
    

    フィールドの説明Field descriptions

    フィールドField 説明Description
    spring.jms.servicebus.connection-string Azure portal の自分の Service Bus 名前空間で取得した接続文字列を指定します。Specify the connection string you obtained in your Service Bus namespace from the Azure portal.
    spring.jms.servicebus.topic-client-id 持続的サブスクリプションで Azure Service Bus トピックを使用している場合は、JMS クライアント ID を指定します。Specify the JMS client ID if you're using an Azure Service Bus topic with a durable subscription.
    spring.jms.servicebus.idle-timeout アイドル タイムアウトをミリ秒単位で指定します。Specify the idle timeout in milliseconds. このチュートリアルで推奨される値は 1800000 です。The recommended value for this tutorial is 1800000.
  4. application.properties ファイルを保存して閉じます。Save and close the application.properties file.

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

このセクションでは、自分の Service Bus キューまたはトピックにメッセージを送信したり、対応するキューまたはトピックのサブスクリプションからメッセージを受信したりするために必要な Java クラスを作成します。In this section, you create the necessary Java classes for sending messages to your Service Bus queue or topic and receive messages from your corresponding queue or topic subscription.

アプリケーションのメイン クラスを変更する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\wingtiptoys\servicebus\ServiceBusJmsStarterApplication.java

    または-or-

    /users/example/home/servicebus/src/main/java/com/wingtiptoys/servicebus/ServiceBusJmsStarterApplication.java

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

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

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

テスト Java クラスを定義するDefine a test Java class

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

  2. ユーザーの名前を格納したり取得したりする汎用的なユーザー クラスを定義します。Define a generic user class that stores and retrieves user's name:

    package com.wingtiptoys.servicebus;
    
    import java.io.Serializable;
    
    // Define a generic User class.
    public class User implements Serializable {
    
        private static final long serialVersionUID = -295422703255886286L;
    
        private String name;
    
        public User() {
        }
    
        public User(String name) {
            setName(name);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }
    

    Spring フレームワークで JmsTemplatesend メソッドを使用するために、Serializable が実装されます。Serializable is implemented to use the send method in JmsTemplate in the Spring framework. それ以外の場合は、テキスト形式の json に内容をシリアル化するために、カスタマイズした MessageConverter bean を定義する必要があります。Otherwise, a customized MessageConverter bean should be defined to serialize the content to json in text format. MessageConverter の詳細については、公式の Spring JMS スターター プロジェクトを参照してください。For more information about MessageConverter, see the official Spring JMS starter project.

  3. User.java ファイルを保存して閉じます。Save and close the User.java file.

メッセージ送信コントローラー用の新しいクラスを作成するCreate a new class for the message send controller

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

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

    package com.wingtiptoys.servicebus;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class SendController {
    
        private static final String DESTINATION_NAME = "<DestinationName>";
    
        private static final Logger logger = LoggerFactory.getLogger(SendController.class);
    
        @Autowired
        private JmsTemplate jmsTemplate;
    
        @PostMapping("/messages")
        public String postMessage(@RequestParam String message) {
            logger.info("Sending message");
            jmsTemplate.convertAndSend(DESTINATION_NAME, new User(message));
            return message;
        }
    }
    

    注意

    <DestinationName> は、自分の Service Bus 名前空間に構成されている実際のキュー名またはトピック名に置き換えてください。Replace <DestinationName> with your own queue name or topic name configured in your Service Bus namespace.

  3. SendController.java を保存して閉じます。Save and close the SendController.java.

メッセージ受信コントローラー用のクラスを作成するCreate a class for the message receive controller

Service Bus キューからメッセージを受信するReceive messages from a Service Bus queue

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

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

    package com.wingtiptoys.servicebus;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class QueueReceiveController {
    
        private static final String QUEUE_NAME = "<ServiceBusQueueName>";
    
        private final Logger logger = LoggerFactory.getLogger(QueueReceiveController.class);
    
        @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory")
        public void receiveMessage(User user) {
            logger.info("Received message: {}", user.getName());
        }
    }
    

    注意

    <ServiceBusQueueName> は、自分の Service Bus 名前空間に構成されている実際のキュー名に置き換えてください。Replace <ServiceBusQueueName> with your own queue name configured in your Service Bus namespace.

  3. QueueReceiveController.java ファイルを保存して閉じます。Save and close the QueueReceiveController.java file.

Service Bus サブスクリプションからメッセージを受信するReceive messages from a Service Bus subscription

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

  2. この新しいファイルに次のコードを追加します。Add the following code to the new file. <ServiceBusTopicName> プレースホルダーは、自分の Service Bus 名前空間に構成されている実際のトピック名に置き換えてください。Replace the <ServiceBusTopicName> placeholder with your own topic name configured in your Service Bus namespace. <ServiceBusSubscriptionName> プレースホルダーは、自分の Service Bus トピックの実際のサブスクリプション名に置き換えてください。Replace the <ServiceBusSubscriptionName> placeholder with your own subscription name for your Service Bus topic.

    package com.wingtiptoys.servicebus;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class TopicReceiveController {
    
        private static final String TOPIC_NAME = "<ServiceBusTopicName>";
    
        private static final String SUBSCRIPTION_NAME = "<ServiceBusSubscriptionName>";
    
        private final Logger logger = LoggerFactory.getLogger(TopicReceiveController.class);
    
        @JmsListener(destination = TOPIC_NAME, containerFactory = "topicJmsListenerContainerFactory",
                subscription = SUBSCRIPTION_NAME)
        public void receiveMessage(User user) {
            logger.info("Received message: {}", user.getName());
        }
    }
    
  3. TopicReceiveController.java ファイルを保存して閉じます。Save and close the TopicReceiveController.java file.

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

  1. コマンド プロンプトを開き、ディレクトリを自分の pom.xml の保存先に変更します。例:Open a command prompt and change directory to the location of your pom.xml; for example:

    cd C:\SpringBoot\servicebus

    または-or-

    cd cd /users/example/home/servicebus

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

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

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

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

    [nio-8080-exec-1] com.wingtiptoys.servicebus.SendController : Sending message
    [enerContainer-1] com.wingtiptoys.servicebus.ReceiveController : Received message: hello
    

リソースのクリーンアップ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