연습 - 이벤트 허브를 통해 메시지를 보내거나 받도록 애플리케이션 구성

완료됨

이제 이벤트 허브에 대한 게시자 및 소비자 애플리케이션을 구성할 준비가 되었습니다.

이 단원에서는 이벤트 허브를 통해 메시지를 보내거나 받도록 애플리케이션을 구성하겠습니다. 한 애플리케이션은 메시지 발신자(SimpleSend)로 사용되고 다른 하나는 메시지 수신자(EventProcessorSample)로 사용됩니다. 이러한 애플리케이션은 Java로 작성되므로 브라우저에서 모든 개발, 테스트, 관리를 수행할 수 있습니다. 그러나 .NET 등의 각 플랫폼에 동일한 구성을 사용해야 합니다. 애플리케이션은 GitHub 리포지토리에 저장됩니다.

범용 표준 스토리지 계정 만들기

Java 수신기 애플리케이션은 스토리지 계정이 필요한 Azure Blob Storage에 메시지를 저장합니다. storage account create 명령을 사용하여 스토리지 계정(범용 V2)을 만듭니다. 이 명령에 대해 다음 매개 변수를 정의합니다.

매개 변수 설명
이름(필수) 스토리지 계정의 이름입니다.
resource-group(필수) 리소스 그룹 소유자는 이미 기본값으로 정의된 샌드박스 리소스 그룹입니다.
location(선택 사항) 지역이 이미 기본값으로 정의되어 있지만 기본 리소스 그룹 위치에서 다른 지역을 설정하려면 추가할 수 있습니다.
sku 스토리지 계정의 기본 SKU 값은 Standard_RAGRS입니다. 그러나 이 연습에서는 해당 값을 지정합니다.

이전 연습에서 리소스 그룹 및 위치에 대한 기본값을 정의했으므로 명령에서 매개 변수를 생략할 수 있습니다.

  1. Azure Cloud Shell에서 스토리지 계정 이름을 변수로 설정합니다. 스토리지 계정 이름은 Azure 내에서 고유해야 하며 3~24 개의 숫자나 소문자를 포함해야 합니다.

    STORAGE_NAME=storagename$RANDOM
    
  2. 다음 명령을 실행하여 스토리지 계정을 만듭니다.

    az storage account create --name $STORAGE_NAME --sku Standard_RAGRS --encryption-service blob
    

    스토리지 계정을 만드는 데 시간이 걸릴 수 있습니다. 스토리지 계정 만들기에 실패하면 환경 변수를 변경하고 다시 시도하세요.

  3. 다음 명령을 실행하여 스토리지 계정과 연결된 액세스 키를 가져옵니다.

    az storage account keys list --account-name $STORAGE_NAME
    
  4. 스토리지 계정과 연결된 두 키가 JSON 형식으로 출력됩니다. 나중에 사용할 수 있도록 key1 값을 복사하고 저장합니다. 스토리지 계정에 액세스하려면 이 키가 필요합니다.

  5. 다음 명령을 실행하여 스토리지 계정에 대한 연결 문자열을 가져옵니다.

    az storage account show-connection-string -n $STORAGE_NAME
    
  6. 출력에는 스토리지 계정에 대한 연결 세부 정보가 포함됩니다. connectionString을 복사하고 저장합니다. 다음과 같이 표시됩니다.

    "DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=storage_account_name;AccountKey=VZjXuMeuDqjCkT60xX6L5fmtXixYuY2wiPmsrXwYHIhwo736kSAUAj08XBockRZh7CZwYxuYBPe31hi8XfHlWw=="
    
  7. 다음 명령을 실행하여 스토리지 계정에서 messages라는 이름의 컨테이너를 만듭니다. 이전 단계에서 복사한 connectionString 값을 사용합니다.

    az storage container create --name messages --connection-string "<connection string here>"
    

이벤트 허브 GitHub 리포지토리 복제

Cloud Shell에서 git를 사용하여 이벤트 허브 GitHub 리포지토리를 복제합니다. 이 단원에서 빌드할 애플리케이션의 원본 파일은 GitHub 리포지토리에 위치합니다.

  1. 다음 명령을 실행하여 Cloud Shell의 홈 디렉터리에 있는지 확인한 후 이 리포지토리를 복제합니다.

    cd ~
    git clone https://github.com/Azure/azure-event-hubs.git
    

리포지토리는 홈 폴더에 복제됩니다.

SimpleSend.java 편집

이 연습에서는 기본 제공 Cloud Shell 편집기를 사용하여 SimpleSend 애플리케이션을 수정합니다. Event Hubs 네임스페이스, 이벤트 허브 이름, 공유 액세스 정책 이름 및 기본 키를 추가해야 합니다.

  1. SimpleSend 폴더로 변경합니다.

    cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend/src/main/java/com/microsoft/azure/eventhubs/samples/SimpleSend
    
  2. 현재 폴더에서 Cloud Shell 편집기를 엽니다.

    code .
    

    왼쪽 메뉴에 현재 폴더 내 파일이 나열되고 오른쪽의 편집기 공간에 제목 표시줄에 나열된 파일 이름 내용이 표시됩니다.

  3. SimpleSend.java가 열려 있지 않으면 파일 목록에서 선택하여 엽니다.

  4. 편집기의 `ConnectionStringBuilder``에서 다음 문자열을 찾아서 바꿉니다.

    • "Your Event Hubs namespace name"을 Event Hubs 네임스페이스 이름으로 바꿉니다.
    • "Your Event Hub"를 이벤트 허브 이름으로 바꿉니다.
    • "Your policy name"RootManageSharedAccessKey로 바꿉니다.
    • "Your primary SAS key"를 이전에 저장한 Event Hubs 네임스페이스에 대한 primaryKey 키 값으로 바꿉니다.

    값을 잊어버린 경우 편집기 아래에 있는 터미널 창으로 전환하고 echo 명령을 실행하여 환경 변수를 나열할 수 있습니다. 예시:

    echo $NS_NAME
    echo $HUB_NAME
    echo $STORAGE_NAME
    

    기본 SAS 키의 경우, Event Hubs 네임스페이스를 만들 때 RootManageSharedAccessKey라는 256비트 SAS 키가 만들어지고, 여기에는 네임스페이스에 대해 전송, 수신 대기, 관리 권한을 부여하는 기본 키 및 보조 키가 포함됩니다. 본 연습의 앞부분에서는 Azure CLI 명령을 실행하여 키를 가져왔습니다. 그러나 Azure Portal에서 Event Hubs 네임스페이스를 선택한 다음, 설정 메뉴에서 공유 액세스 정책을 선택하여 키와 연결 문자열을 찾을 수도 있습니다. 이제 정책 이름 RootManageSharedAccessKey를 선택하여 SAS 정책 키를 표시합니다.

  5. SimpleSend.java 파일을 저장한 다음 편집기를 닫습니다.

    편집 내용을 저장하려면 Ctrl+S를 사용합니다. Windows 및 Linux에서 Ctrl+X를 누르거나 macOS에서 Cmd+S를 눌러 편집기를 종료합니다. Cloud Shell 터미널 창과 달리 Cloud Shell 편집기는 OS의 일반적인 복사/붙여넣기 단축키를 사용합니다. 또는 추가적인 편집 명령을 위해 오른쪽 상단에 있는 말줄임표(...)를 선택하여 편집기 메뉴를 엽니다.

Maven을 사용하여 SimpleSend.java 빌드

이제 mvn 명령을 실행하여 Java 애플리케이션을 빌드합니다.

  1. Cloud Shell에서 다음 명령을 입력하여 기본 SimpleSend 폴더로 이동합니다.

    cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend
    
  2. Java SimpleSend 애플리케이션을 빌드합니다. 이 명령은 이벤트 허브에 대한 연결 세부 정보를 사용하여 애플리케이션을 빌드합니다.

    mvn clean package -DskipTests
    

    빌드 프로세스를 완료하는 데 몇 분이 걸릴 수 있습니다. 계속하기 전에 [정보] 빌드 성공 메시지가 표시되는지 확인합니다.

    Build results for sender application.

EventProcessorSample.java 편집

Event Hub에서 데이터를 수집하도록 수신자(구독자 또는 소비자라고도 함) 애플리케이션을 구성하겠습니다.

수신기 애플리케이션의 경우 두 가지 클래스인 EventHubReceiverEventProcessorHost를 사용할 수 있습니다. EventProcessorHost는 EventHubReceiver의 맨 위에 빌드되지만 EventHubReceiver보다 더 단순한 프로그래밍 인터페이스를 제공합니다. EventProcessorHost는 동일한 스토리지 계정을 사용하여 EventProcessorHost의 여러 인스턴스에서 자동으로 메시지 파티션을 배포할 수 있습니다.

이 절차에서는 EventProcessorHost 메서드를 사용합니다. EventProcessorSample 애플리케이션을 편집하여 다음 값을 추가합니다. Event Hubs 네임스페이스, 이벤트 허브 이름, 공유 액세스 정책 이름 및 기본 키, 스토리지 계정 이름, 연결 문자열 및 컨테이너 이름입니다.

  1. 다음 명령을 실행하여 EventProcessorSample 폴더로 변경합니다.

    cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample/src/main/java/com/microsoft/azure/eventhubs/samples/eventprocessorsample
    
  2. Cloud Shell 편집기를 엽니다.

    code .
    
  3. EventProcessorSample.java 파일을 선택합니다.

  4. 편집기에서 다음 문자열을 찾아서 바꿉니다.

    • ----EventHubNamespaceName----을 Event Hubs 네임스페이스 이름으로 바꿉니다.
    • ----EventHubName----를 이벤트 허브 이름으로 바꿉니다.
    • ----SharedAccessSignatureKeyName----RootManageSharedAccessKey로 바꿉니다.
    • ----SharedAccessSignatureKey----를 이전에 저장한 Event Hubs 네임스페이스에 대한 primaryKey 키 값으로 바꿉니다.
    • ----AzureStorageConnectionString----을 이전에 저장한 스토리지 계정 연결 문자열로 바꿉니다.
    • ----StorageContainerName----messages로 바꿉니다.
    • ----HostNamePrefix----를 스토리지 계정 이름으로 바꿉니다.
  5. “...” 메뉴 또는 액셀러레이터 키(Windows 및 Linux에서는 Ctrl+S, macOS에서는 Cmd+S)를 사용하여 EventProcessorSample.java를 저장합니다.

  6. 편집기를 닫습니다.

Maven을 사용하여 EventProcessorSample.java 빌드

  1. 다음 명령을 실행하여 기본 EventProcessorSample 폴더로 변경합니다.

    cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample
    
  2. 다음 명령을 실행하여 Java SimpleSend 애플리케이션을 빌드하여 애플리케이션이 이벤트 허브에 대한 연결 세부 정보를 사용하는지 확인합니다.

    mvn clean package -DskipTests
    

    빌드 프로세스를 완료하는 데 몇 분이 걸릴 수 있습니다. 계속하기 전에 [정보] 빌드 성공 메시지가 표시되는지 확인합니다.

    Build results for receiver application.

발신자 및 수신자 앱 시작

  1. 다음 java 명령을 실행하고 .jar 패키지를 지정하여 명령줄에서 Java 애플리케이션을 실행합니다. 다음 명령을 실행하여 SimpleSend 애플리케이션을 시작합니다.

    cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend
    java -jar ./target/simplesend-1.0.0-jar-with-dependencies.jar
    
  2. 보내기 완료...가 표시되면 Enter 키를 누릅니다.

    jar-with-dependencies.jar
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    2018-09-18T19:42:15.146Z: Send Complete...
    
  3. 다음 명령을 실행하여 EventProcessorSample 애플리케이션을 시작합니다.

    cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample
    java -jar ./target/eventprocessorsample-1.0.0-jar-with-dependencies.jar
    
  4. 메시지가 콘솔에 나타나지 않으면 Enter 키나 Ctrl+C를 눌러 프로그램을 종료합니다.

    ...
    SAMPLE: Partition 0 checkpointing at 1064,19
    SAMPLE (3,1120,20): "Message 80"
    SAMPLE (3,1176,21): "Message 84"
    SAMPLE (3,1232,22): "Message 88"
    SAMPLE (3,1288,23): "Message 92"
    SAMPLE (3,1344,24): "Message 96"
    SAMPLE: Partition 3 checkpointing at 1344,24
    SAMPLE (2,1120,20): "Message 83"
    SAMPLE (2,1176,21): "Message 87"
    SAMPLE (2,1232,22): "Message 91"
    SAMPLE (2,1288,23): "Message 95"
    SAMPLE (2,1344,24): "Message 99"
    SAMPLE: Partition 2 checkpointing at 1344,24
    SAMPLE: Partition 1 batch size was 3 for host mystorageacct2018-46d60a17-7060-4b53-b0e0-cca70c970a47
    SAMPLE (0,1120,20): "Message 81"
    SAMPLE (0,1176,21): "Message 85"
    SAMPLE: Partition 0 batch size was 10 for host mystorageacct2018-46d60a17-7060-4b53-b0e0-cca70c970a47
    SAMPLE: Partition 0 got event batch
    SAMPLE (0,1232,22): "Message 89"
    SAMPLE (0,1288,23): "Message 93"
    SAMPLE (0,1344,24): "Message 97"
    SAMPLE: Partition 0 checkpointing at 1344,24
    SAMPLE: Partition 3 batch size was 8 for host mystorageacct2018-46d60a17-7060-4b53-b0e0-cca70c970a47
    SAMPLE: Partition 2 batch size was 9 for host mystorageacct2018-46d60a17-7060-4b53-b0e0-cca70c970a47
    SAMPLE: Partition 0 batch size was 3 for host mystorageacct2018-46d60a17-7060-4b53-b0e0-cca70c970a47
    

요약

이 단원에서는 이벤트 허브에 메시지를 보낼 준비가 된 발신자 애플리케이션을 구성했습니다. 또한 이벤트 허브에서 메시지를 받을 수 있는 수신자 애플리케이션을 구성했습니다.