시작하기: ActiveMQ 브로커 생성 및 연결 - Amazon MQ

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

시작하기: ActiveMQ 브로커 생성 및 연결

브로커는 Amazon MQ에서 실행하는 메시지 브로커 환경입니다. 이 인스턴스는 Amazon MQ의 기본 빌딩 블록입니다. 브로커 인스턴스 클래스(m5, t3) 및 크기(large, micro)의 설명 조합은 브로커 인스턴스 유형(예: mq.m5.large)입니다. 자세한 정보는 ActiveMQ 브로커용 아마존 MQ란 무엇입니까?을 참조하세요.

1단계: ActiveMQ 브로커 생성

가장 먼저 이루어지고 가장 흔한 Amazon MQ 태스크는 브로커를 생성하는 것입니다. 다음 예제는 를 사용하여 기본 브로커를 만드는 AWS Management Console 방법을 보여줍니다.

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

  2. Select broker engine(브로커 엔진 선택) 페이지에서 Apache ActiveMQ를 선택합니다.

  3. Select deployment and storage(배포 및 스토리지 선택) 페이지의 Deployment mode and storage type(배포 모드 및 스토리지 유형) 섹션에서 다음을 수행합니다.

    1. Deployment mode(배포 모드)를 선택합니다(예: Active/standby broker(활성/대기 브로커)). 자세한 정보는 ActiveMQ 브로커용 Amazon MQ 배포 옵션을 참조하세요.

      • 단일 인스턴스 브로커는 하나의 가용 영역에 있는 하나의 브로커로 구성됩니다. 브로커는 애플리케이션 및 Amazon EBS 또는 Amazon EFS 스토리지 볼륨과 통신합니다. 자세한 내용은 옵션 1: Amazon MQ 단일 인스턴스 브로커 단원을 참조하십시오.

      • 고가용성을 위한 활성/대기 브로커는 두 개의 서로 다른 가용 영역에 있는 두 개의 브로커가 중복 페어로 구성됩니다. 이러한 브로커는 애플리케이션 및 Amazon과 동시에 통신합니다. EFS 자세한 내용은 옵션 2: 고가용성을 위한 Amazon MQ 액티브/스탠바이 브로커 단원을 참조하십시오.

      • 브로커 네트워크의 샘플 블루프린트에 대한 자세한 내용은 샘플 블루프린트 단원을 참조하세요.

    2. 스토리지 유형 (예:) 을 EBS선택합니다. 자세한 내용은 Storage 단원을 참조하십시오.

      참고

      Amazon은 단일 가용 영역 내에서 데이터를 EBS 복제하며 ActiveMQ 액티브/스탠바이 배포 모드를 지원하지 않습니다.

    3. Next(다음)를 선택합니다.

  4. Configure settings(설정 구성) 페이지의 세부 정보 섹션에서 다음을 선택합니다.

    1. Broker name(브로커 이름)을 입력합니다.

      중요

      브로커 이름에 개인 식별 정보 (PII) 또는 기타 기밀 또는 민감한 정보를 추가하지 마십시오. 브로커 이름은 로그를 포함한 CloudWatch 다른 AWS 서비스에서 액세스할 수 있습니다. 브로커 이름은 개인 데이터나 민감한 데이터에 사용하기 위한 것이 아닙니다.

    2. Broker instance type(브로커 인스턴스 유형)을 선택합니다(예: mq.m5.large). 자세한 정보는 Broker instance types을 참조하세요.

  5. ActiveMQ Web Console access(ActiveMQ 웹 콘솔 액세스) 섹션에서 Username(사용자 이름)Password(암호)를 입력합니다. 브로커 사용자 이름과 암호에는 다음 제한이 적용됩니다.

    • 사용자 이름은 영숫자, 대시, 마침표, 밑줄 및 물결 기호(- . _ ~)만 포함할 수 있습니다.

    • 암호는 최소 12자 길이이고 최소 4개의 고유 문자가 있어야 하며 쉼표, 콜론 또는 등호(,:=)는 포함할 수 없습니다.

    중요

    브로커 사용자 이름에 개인 식별 정보 (PII) 또는 기타 기밀 또는 민감한 정보를 추가하지 마십시오. 브로커 사용자 이름은 로그를 포함한 다른 AWS 서비스에서 액세스할 수 있습니다. CloudWatch 브로커 사용자 이름은 개인 데이터나 민감한 데이터에 사용하기 위한 것이 아닙니다.

  6. 배포(Deploy)를 선택합니다.

    Amazon MQ에서 브로커를 생성하는 동안 Creation in progress(생성 진행 중) 상태가 표시됩니다.

    브로커 생성은 약 15분 정도 소요됩니다.

    브로커가 생성되면 Amazon MQ에서 Running(실행 중) 상태가 표시됩니다.

  7. MyBroker.

    에서 MyBrokerConnect 섹션의 Connect 섹션에서 브로커의 ActiveMQ 웹 콘솔을 기록해 둡니다. 예를 들면 다음과 같습니다. URL

    https://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:8162

    또한 브로커의 와이어 레벨 프로토콜 엔드포인트도 기록합니다. 다음은 엔드포인트의 예입니다. OpenWire

    ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617

2단계: Java 애플리케이션을 브로커에 연결

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

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

사전 조건

VPC속성 활성화

참고

기존 Amazon MQ 브로커에 대한 퍼블릭 액세스 권한을 비활성화할 수 없습니다.

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

인바운드 연결 활성화

그런 다음 다음 지침에 따라 브로커의 인바운드 연결을 활성화하십시오.

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

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

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

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

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

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

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

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

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

    2. 유형에서 사용자 TCP 지정을 선택합니다.

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

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

    5. 저장(Save)을 선택합니다.

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

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

    와이어 레벨 프로토콜 엔드포인트의 경우 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 메시징 서비스 (예: AmazonSQS) 와 달리 소비자는 브로커와 지속적으로 연결됩니다.

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

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

3단계: (선택 사항) AWS Lambda 함수에 연결

AWS Lambda Amazon MQ 브로커에 연결하여 메시지를 사용할 수 있습니다. 브로커를 Lambda에 연결할 때는 대기열에서 메시지를 읽고 함수를 동기식으로 호출하는 이벤트 소스 매핑을 생성합니다. 생성한 이벤트 소스 매핑은 브로커에서 메시지를 일괄적으로 읽고 이를 객체 형태의 Lambda 페이로드로 변환합니다. JSON

브로커를 Lambda 함수에 연결하려면
  1. Lambda 함수 실행 IAM 역할에 다음 역할 권한을 추가합니다.

    참고

    필요한 IAM 권한이 없으면 함수가 Amazon MQ 리소스에서 레코드를 제대로 읽을 수 없습니다.

  2. (선택 사항) 퍼블릭 액세스 가능성이 없는 브로커를 생성한 경우 다음 중 하나를 수행하여 Lambda가 브로커에 연결하도록 허용해야 합니다.

  3. AWS Management Console을 사용하여 Lambda 함수에 대해 브로커를 이벤트 소스로 구성합니다. 명령을 사용할 수도 있습니다. create-event-source-mapping AWS Command Line Interface

  4. 브로커에서 소비한 메시지를 Lambda 함수가 처리하는 코드를 작성합니다. 이벤트 소스 매핑에서 검색되는 Lambda 페이로드는 브로커의 엔진 유형에 따라 다릅니다. 다음은 ActiveMQ용 Amazon MQ 대기열의 Lambda 페이로드 예제입니다.

    참고

    이 예제에서 testQueue는 대기열의 이름입니다.

    { "eventSource": "aws:amq", "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", "messages": { [ { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/text-message", "data": "QUJDOkFBQUE=", "connectionId": "myJMSCoID", "redelivered": false, "destination": { "physicalname": "testQueue" }, "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959 }, { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1.mq.us-west-2.amazonaws.com-37557-1234520418293-4:1:1:1:1", "messageType":"jms/bytes-message", "data": "3DTOOW7crj51prgVLQaGQ82S48k=", "connectionId": "myJMSCoID1", "persistent": false, "destination": { "physicalname": "testQueue" }, "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959 } ] } }

Amazon MQ를 Lambda에 연결하는 방법, Amazon MQ 이벤트 소스에 대해 Lambda가 지원하는 옵션 및 이벤트 소스 매핑 오류에 대한 자세한 내용은 AWS Lambda 개발자 안내서에서 Amazon MQ에서 Lambda 사용을 참조하세요.