Amazon MQ 브로커에 Java 애플리케이션 연결 - Amazon MQ

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

Amazon MQ 브로커에 Java 애플리케이션 연결

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

다양한 ActiveMQ 클라이언트를 사용하여 ActiveMQ 브로커에 연결할 수 있습니다. ActiveMQ 클라이언트를 사용하는 것이 좋습니다.

필수 조건

VPC 속성 활성화

VPC 내에서 브로커에 액세스할 수 있도록 하려면 enableDnsHostnamesenableDnsSupport VPC 속성을 활성화해야 합니다. 자세한 내용은 Amazon VPC 사용 설명서VPC에서 DNS 지원을 참조하세요.

인바운드 연결 활성화

  1. Amazon MQ 콘솔에 로그인합니다.

  2. 브로커 목록에서 브로커 이름 (예: MyBroker) 을 선택합니다.

  3. MyBroker페이지의 연결 섹션에서 브로커 웹 콘솔 URL 및 유선 수준 프로토콜의 주소와 포트를 기록해 둡니다.

  4. 세부 정보 섹션의 보안 및 네트워크에서 보안 그룹의 이름 또는 을 선택합니다.

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

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

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

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

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

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

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

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

    5. 저장을 선택합니다.

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

Java 종속성 추가

activemq-client.jaractivemq-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을 참조하세요.

중요

다음 예제 코드에서 생성자와 소비자는 단일 스레드에서 실행됩니다. 프로덕션 시스템(또는 브로커 인스턴스 장애 조치 테스트)의 경우 생산자와 소비자가 별도의 호스트 또는 스레드에서 실행되는지 확인합니다.

메시지 생산자를 생성하고 메시지를 전송하려면

  1. 브로커의 엔드포인트를 사용하여 메시지 생산자에 대한 JMS 풀링된 연결 팩토리를 생성한 다음 팩토리에 대해 createConnection 메서드를 호출합니다.

    참고

    활성/대기 브로커의 경우 Amazon MQ는 2개의 ActiveMQ 웹 콘솔 URL을 제공하지만, 한 번에 하나의 URL만 활성화됩니다. 마찬가지로 Amazon MQ는 각 와이어 레벨 프로토콜에 대해 2개의 엔드포인트를 제공하지만, 한 번에 각 페어의 한 엔드포인트만 활성화됩니다. -1-2 접미사는 중복 페어를 나타냅니다. 자세한 내용은 Broker Architecture 단원을 참조하세요.

    와이어 레벨 프로토콜 엔드포인트의 경우 Failover Transport를 사용하여 애플리케이션이 다른 엔드포인트와 연결하도록 허용할 수 있습니다.

    // 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 클래스를 사용해야 합니다. 자세한 정보는 항상 연결 풀 사용을 참조하세요.

  2. 세션, 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);
  3. 문자열 "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.");
  4. 생산자를 정리합니다.

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

메시지 소비자를 생성하고 메시지를 수신하려면

  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 클래스를 사용하면 안 됩니다. 자세한 정보는 항상 연결 풀 사용을 참조하세요.

  2. 세션, 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);
  3. 메시지가 오기를 기다리다가 메시지가 도착하면 이를 수신합니다.

    // 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) 와 달리 소비자는 브로커와 지속적으로 연결됩니다.

  4. 소비자, 세션 및 연결을 종료합니다.

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