演習 - イベント ハブを経由してメッセージを送受信するアプリケーションを構成する

完了

イベント ハブに対してパブリッシャー アプリケーションとコンシューマー アプリケーションを構成する準備ができました。

このユニットでは、イベント ハブを通してメッセージを送受信するようにアプリケーションを構成します。 1 つのアプリケーションはメッセージの送信側として機能し (SimpleSend)、もう 1 つはメッセージの受信側として機能します (EventProcessorSample)。 これらのアプリケーションは Java で記述されているので、開発、テスト、管理のすべてをブラウザーで行うことができます。 しかし、.NET など、各プラットフォームで同じ構成を使用する必要があります。 アプリケーションは GitHub リポジトリに格納されます。

汎用の Standard ストレージ アカウントを作成する

Java 受信側アプリケーションでは Azure Blob Storage にメッセージを格納するので、ストレージ アカウントが必要です。 ストレージ アカウント (汎用 V2) を作成するには、storage account create コマンドを使用します。 このコマンドには、以下のパラメーターを定義します。

パラメーター 説明
名前 (必須) ストレージ アカウントの名前。
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. ストレージ アカウントに関連付けられている 2 つのキーが 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=xxxxxxxxxxx"
    
  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 ファイルを保存してから、エディターを閉じます。 エディターの右上隅で選択し、[保存][エディターを閉じる] メニュー項目を使用します。

    ファイルを保存してエディターを閉じるためのメニュー項目を示すスクリーンショット。

Maven を使用して SimpleSend.java をビルドする

次に、mvn コマンドを実行して Java アプリケーションをビルドします。

  1. Cloud Shell で次のコマンドを入力して、メインの SimpleSend フォルダーに移動します。

    cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend
    
  2. Java SimpleSend アプリケーションをビルドします。 このコマンドにより、イベント ハブの接続の詳細を使用してアプリケーションがビルドされます。

    mvn clean package -DskipTests
    

    ビルド プロセスが完了するには数分かかる場合があります。 次に進む前に [INFO] BUILD SUCCESS メッセージが表示されていることを確認します。

    送信側アプリケーションのビルド結果。

EventProcessorSample.java を編集する

次に、イベント ハブからデータを取り込むようにレシーバー (サブスクライバーまたはコンシューマーとも呼ばれます) アプリケーションを構成します。

受信側アプリケーションの場合は、2 つのクラスを使用できます。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----メッセージに置換します。
    • ----HostNamePrefix---- をご利用のストレージ アカウントの名前に置換します。

    これらの値を忘れてしまった場合は、エディターの下にあるターミナル ウィンドウに切り替え、echo コマンドを実行して環境変数を一覧表示できます。 次に例を示します。

    echo $NS_NAME
    echo $HUB_NAME
    echo $STORAGE_NAME
    
  5. [...] メニュー、またはアクセラレータ キー (Windows と Linux の場合は Ctrl + S、macOS の場合は command + S) を使用して、EventProcessorSample.java を保存します。

  6. エディターを閉じます。

Maven を使用して EventProcessorSample.java をビルドする

  1. 次のコマンドを実行して、メインの EventProcessorSample フォルダーに移動します。

    cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample
    
  2. 次のコマンドを実行して Java SimpleSend アプリケーションをビルドし、アプリケーションでイベント ハブの接続の詳細を使用します。

    mvn clean package -DskipTests
    

    ビルド プロセスが完了するには数分かかる場合があります。 次に進む前に [INFO] BUILD SUCCESS メッセージが確実に表示されるようにしてください。

    受信側アプリケーションのビルド結果。

送信側アプリと受信側アプリを起動する

  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. "Send Complete..." と表示されたら、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
    

まとめ

このユニットでは、イベント ハブにメッセージを送信できるようにセンダー アプリケーションを構成しました。 また、イベント ハブからメッセージを受信できるようにレシーバー アプリケーションを構成しました。