

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon MQ ブローカーへの Java アプリケーションの接続
<a name="amazon-mq-connecting-application"></a>

Amazon MQ ActiveMQ ブローカーを作成したら、ブローカーにアプリケーションを接続できます。以下の例では、Java Message Service (JMS) を使用してブローカーへの接続を作成し、キューを作成して、メッセージを送信する方法を説明します。完全な Java の実用例については、「[ActiveMQ での Java Message Service (JMS) の使用の実用例](amazon-mq-working-java-example.md)」を参照してください。

ActiveMQ ブローカーには、[さまざまな ActiveMQ クライアント](http://activemq.apache.org/cross-language-clients.html)を使用して接続できます。[ActiveMQ クライアント](https://mvnrepository.com/artifact/org.apache.activemq/activemq-client)を使用することをお勧めします。

**Topics**
+ [前提条件](#connect-application-prerequisites-tutorial)
+ [メッセージプロデューサーを作成してメッセージを送信する](#create-producer-send-message-tutorial)
+ [メッセージコンシューマーを作成してメッセージを受信する](#create-consumer-receive-message-tutorial)

## 前提条件
<a name="connect-application-prerequisites-tutorial"></a>

### VPC 属性 を有効にする
<a name="connect-application-enable-vpc-attributes-tutorial"></a>

VPC 内でブローカーにアクセスできることを確実にするには、`enableDnsHostnames` および `enableDnsSupport` VPC 属性を有効にする必要があります。詳細については、*Amazon VPC ユーザーガイド*の「[VPC の DNS サポート](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support)」を参照してください。

### インバウンド接続を有効にする
<a name="connect-application-allow-inbound-connections-tutorial"></a>

次に、アプリケーションのインバウンド接続を有効にします。

1. [Amazon MQ コンソール](https://console.aws.amazon.com/amazon-mq/)にサインインします。

1. ブローカーのリストからブローカーの名前 (**MyBroker** など) を選択します。

1. [**{{MyBroker}}**] ページの [**Connections**] (接続) セクションで、ブローカーのウェブコンソール URL とワイヤレベルプロトコルのアドレスとポートをメモします。

1. [**Details**] (詳細) セクションの [**Security and network**] (セキュリティとネットワーク) で、セキュリティグループの名前または ![](http://docs.aws.amazon.com/ja_jp/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-broker-details-link.png) をクリックします。

   EC2 ダッシュボードの [**セキュリティグループ**] ページが表示されます。

1. セキュリティグループのリストから、セキュリティグループを選択します。

1. ページ下部で、[**インバウンド**] を選択し、次に [**編集**] を選択します。

1. [**Edit inbound rules**] (インバウンドルールの編集) ダイアログボックスで、パブリックアクセスを許可する URL またはエンドポイントごとにルールを追加します (以下の例は、これをブローカーのウェブコンソールに対して行う方法を説明しています)。

   1. **[ルールの追加]** を選択します。

   1. [**タイプ**] で、[**カスタム TCP**] を選択します。

   1. [**Port Range**] (ポート範囲) にはウェブコンソールポート (`8162`) を入力します。

   1. [**Source**] (ソース) では、[**Custom**] (カスタム) が選択された状態のままにしておき、ウェブコンソールにアクセスできるようにするシステムの IP アドレスを入力します (`192.0.2.1` など)。

   1. [**Save**] (保存) をクリックします。

      これで、ブローカーはインバウンド接続を受け入れることができます。

### Java の依存関係を追加する
<a name="connect-application-java-dependencies-tutorial"></a>

`activemq-client.jar` パッケージと `activemq-pool.jar` パッケージを Java クラスパスに追加します。以下の例は、Maven プロジェクトの `pom.xml` ファイルにあるこれらの依存関係を示しています。

```
<dependencies>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <version>5.15.16</version>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-pool</artifactId>
        <version>5.15.16</version>
    </dependency>
</dependencies>
```

`activemq-client.jar` の詳細については、Apache ActiveMQ ドキュメントの「[Initial Configuration](http://activemq.apache.org/initial-configuration.html)」を参照してください。

**重要**  
以下のコード例では、プロデューサーとコンシューマーが単一のスレッド内で実行されます。実稼働システム (またはブローカーインスタンスのフェイルオーバーをテストする) には、プロデューサーとコンシューマーが個別のホストまたはスレッドで実行されるようにしてください。

## メッセージプロデューサーを作成してメッセージを送信する
<a name="create-producer-send-message-tutorial"></a>

 メッセージプロデューサーを作成してメッセージを受信するには、次の手順に従います。

1. ブローカーのエンドポイントを使用してメッセージプロデューサーの JMS プール接続ファクトリを作成してから、ファクトリに対して `createConnection` メソッドを呼び出します。
**注記**  
アクティブ/スタンバイブローカーの場合、Amazon MQ は 2 つの ActiveMQ ウェブコンソール URL を提供しますが、一度に 1 つの URL しかアクティブになりません。同様に、Amazon MQ はワイヤレベルプロトコルごとに 2 つのエンドポイントを提供しますが、ペアごとに一度に 1 つのエンドポイントしかアクティブになりません。`-1` および `-2` サフィックスは冗長ペアを表します。詳細については、「[Amazon MQ for ActiveMQ ブローカーのデプロイオプション](amazon-mq-broker-architecture.md)」を参照してください。  
ワイヤレベルプロトコルのエンドポイントについては、[フェイルオーバートランスポート](http://activemq.apache.org/failover-transport-reference.html)を使用することによって、アプリケーションがエンドポイントのどちらか一方に接続することを許可する必要があります。

   ```
   // Create a connection factory.
   final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint);
   
   // Pass the sign-in credentials.
   connectionFactory.setUserName(activeMqUsername);
   connectionFactory.setPassword(activeMqPassword);
   
   // Create a pooled connection factory.
   final PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory();
   pooledConnectionFactory.setConnectionFactory(connectionFactory);
   pooledConnectionFactory.setMaxConnections(10);
   
   // Establish a connection for the producer.
   final Connection producerConnection = pooledConnectionFactory.createConnection();
   producerConnection.start(); 
   
   // Close all connections in the pool.
   pooledConnectionFactory.clear();
   ```
**注記**  
メッセージプロデューサーは、常に `PooledConnectionFactory` クラスを使用する必要があります。詳細については、「[常に接続プールを使用する](best-practices-activemq.md#always-use-connection-pooling)」を参照してください。

1. セッション、`MyQueue` という名前のキュー、およびメッセージプロデューサーを作成します。

   ```
   // Create a session.
   final Session producerSession = producerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
   
   // Create a queue named "MyQueue".
   final Destination producerDestination = producerSession.createQueue("MyQueue");
   
   // Create a producer from the session to the queue.
   final MessageProducer producer = producerSession.createProducer(producerDestination);
   producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
   ```

1. メッセージ文字列 `"Hello from Amazon MQ!"` を作成してから、メッセージを送信します。

   ```
   // Create a message.
   final String text = "Hello from Amazon MQ!";
   TextMessage producerMessage = producerSession.createTextMessage(text);
   
   // Send the message.
   producer.send(producerMessage);
   System.out.println("Message sent.");
   ```

1. プロデューサーをクリーンアップします。

   ```
   producer.close();
   producerSession.close();
   producerConnection.close();
   ```

## メッセージコンシューマーを作成してメッセージを受信する
<a name="create-consumer-receive-message-tutorial"></a>

 メッセージプロデューサーを作成してメッセージを受信するには、次の手順に従います。

1. ブローカーのエンドポイントを使用してメッセージプロデューサーの JMS 接続ファクトリを作成してから、ファクトリに対して `createConnection` メソッドを呼び出します。

   ```
   // Create a connection factory.
   final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint);
   
   // Pass the sign-in credentials.
   connectionFactory.setUserName(activeMqUsername);
   connectionFactory.setPassword(activeMqPassword);
   
   // Establish a connection for the consumer.
   final Connection consumerConnection = connectionFactory.createConnection();
   consumerConnection.start();
   ```
**注記**  
メッセージコンシューマーには、`PooledConnectionFactory` クラスを*一切使用しない*でください。詳細については、「[常に接続プールを使用する](best-practices-activemq.md#always-use-connection-pooling)」を参照してください。

1. セッション、`MyQueue` という名前のキュー、およびメッセージコンシューマーを作成します。

   ```
   // Create a session.
   final Session consumerSession = consumerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
   
   // Create a queue named "MyQueue".
   final Destination consumerDestination = consumerSession.createQueue("MyQueue");
   
   // Create a message consumer from the session to the queue.
   final MessageConsumer consumer = consumerSession.createConsumer(consumerDestination);
   ```

1. メッセージの待機を開始し、メッセージの到着時にメッセージを受信します。

   ```
   // Begin to wait for messages.
   final Message consumerMessage = consumer.receive(1000);
   
   // Receive the message when it arrives.
   final TextMessage consumerTextMessage = (TextMessage) consumerMessage;
   System.out.println("Message received: " + consumerTextMessage.getText());
   ```
**注記**  
 AWS メッセージングサービス (Amazon SQS など) とは異なり、コンシューマーは常にブローカーに接続されます。

1. コンシューマー、セッション、および接続を閉じます。

   ```
   consumer.close();
   consumerSession.close();
   consumerConnection.close();
   ```