

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon MQ 브로커에 Java 애플리케이션 연결
<a name="amazon-mq-connecting-application"></a>

Amazon MQ ActiveMQ 브로커를 생성한 후 애플리케이션을 브로커에 연결할 수 있습니다. 다음 예는 JMS(Java Message Service)를 사용하여 브로커 연결을 생성하고, 대기열을 생성하고, 메시지를 전송하는 방법을 보여줍니다. 완전한 실제 Java 예제는 [ActiveMQ를 통한 JMS(Java Message Service) 사용 예제](amazon-mq-working-java-example.md) 단원을 참조하세요.

[다양한 ActiveMQ 클라이언트](http://activemq.apache.org/cross-language-clients.html)를 사용하여 ActiveMQ 브로커에 연결할 수 있습니다. [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. **세부 정보** 섹션의 **보안 및 네트워크**에서 보안 그룹의 이름 또는 ![\[Pencil icon indicating an edit or modification action.\]](http://docs.aws.amazon.com/ko_kr/amazon-mq/latest/developer-guide/images/amazon-mq-tutorials-broker-details-link.png)을 선택합니다.

   EC2 Dashboard의 **보안 그룹** 페이지가 표시됩니다.

1. 보안 그룹 목록에서 보안 그룹을 선택합니다.

1. 페이지 하단에서 **인바운드**를 선택한 후 **편집**을 선택합니다.

1. **Edit inbound rules(인바운드 규칙 편집)** 대화 상자에서 공개적으로 액세스하고자 하는 모든 URL 또는 엔드포인트에 대한 규칙을 추가합니다. 다음 예제에서는 브로커 웹 콘솔에 대해 이 작업을 수행하는 방법을 보여줍니다.

   1. **규칙 추가(Add Rule)**를 선택합니다.

   1. **유형**에서 **Custom TCP(사용자 지정 TCP)**를 선택합니다.

   1. **Port Range(포트 범위)**에 웹 콘솔 포트(`8162`)를 입력합니다.

   1. **Source(소스)**에서 **Custom(사용자 지정)**을 선택한 상태에서 웹 콘솔에 액세스하는 데 사용할 시스템의 IP 주소(예: `192.0.2.1`)를 입력합니다.

   1. **저장**을 선택합니다.

      이제 브로커가 인바운드 연결을 허용할 수 있습니다.

### 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을 제공하지만, 한 번에 하나의 URL만 활성화됩니다. 마찬가지로 Amazon MQ는 각 와이어 레벨 프로토콜에 대해 2개의 엔드포인트를 제공하지만, 한 번에 각 페어의 한 엔드포인트만 활성화됩니다. `-1` 및 `-2` 접미사는 중복 페어를 나타냅니다. 자세한 정보는 [ActiveMQ용 Amazon MQ 브로커의 배포 옵션](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();
   ```