練習 - 設定應用程式透過事件中樞傳送或接收訊息

已完成

現在您已準備就緒,可以設定事件中樞發行者和取用者應用程式。

在此單元中,您將設定應用程式以透過事件中樞傳送或接收訊息。 其中一個應用程式作為訊息傳送者 (SimpleSend),另一個作為訊息接收者 (EventProcessorSample)。 因為這些應用程式以 JAVA 撰寫,所以您可以在瀏覽器中執行所有的開發、測試和管理。 不過,每個平台都必須使用相同的設定,例如 .NET。 這些應用程式會儲存在 GitHub 存放庫。

建立一般用途的標準儲存體帳戶

JAVA 接收者應用程式將訊息儲存在 Azure Blob 儲存體,所以會需要儲存體帳戶。 使用 storage account create 命令建立儲存體帳戶 (一般用途 V2)。 我們會針對此命令定義下列參數:

參數 描述
名稱 (必要) 儲存體帳戶的名稱。
資源群組 (必要) 資源群組擁有者是沙箱資源群組,並已定義為預設值。
位置 (選用) 區域已定義為預設值,但如果您要設定與預設資源群組位置不同的區域,便可包括此選項。
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=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 應用程式。 您必須新增事件中樞命名空間、事件中樞名稱、共用存取原則名稱和主索引鍵。

  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"
    • "Your Event Hub" 取代為您的事件中樞名稱。
    • "Your policy name" 取代為 RootManageSharedAccessKey
    • 以之前儲存的事件中樞命名空間的 primaryKey 金鑰值,取代 "Your primary SAS key"

    如果您忘記這些值,請切換至編輯器下方的終端機視窗,並執行 echo 命令以列出環境變數。 例如:

    echo $NS_NAME
    echo $HUB_NAME
    echo $STORAGE_NAME
    

    如果是主要 SAS 金鑰,在建立事件中樞命名空間後,會建立名為 RootManageSharedAccessKey 的 256 位元 SAS 金鑰,並包含主要和次要金鑰,可授與命名空間傳送、接聽和管理的權限。 在稍早的練習中,您已執行 Azure CLI 命令取得金鑰,但您也可以在 Azure 入口網站中選取事件中樞命名空間,以尋找金鑰和連接字串,方法是在 [設定] 下的功能表中選取 [共用存取原則],然後再選取名為 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

現在要設定接收者 (也稱為訂閱者取用者) 應用程式,以從事件中樞內嵌資料。

如果是接收者應用程式,您可以使用這兩個類別:EventHubReceiverEventProcessorHost。 EventProcessorHost 以 EventHubReceiver 為組建基礎,但提供比 EventHubReceiver 更簡單的程式設計介面。 EventProcessorHost 可以使用相同的儲存體帳戶,在 EventProcessorHost 多個執行個體自動分配訊息分割區。

在此程序中,您會使用 EventProcessorHost 方法。 編輯 EventProcessorSample 應用程式來新增下列值:您的事件中樞命名空間、事件中樞名稱、共用存取原則名稱和主索引鍵、儲存體帳戶名稱,連接字串以及容器名稱。

  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----
    • ----EventHubName---- 取代為您的事件中樞名稱。
    • ----SharedAccessSignatureKeyName---- 取代為 RootManageSharedAccessKey
    • 以之前儲存的事件中樞命名空間的 primaryKey 金鑰值,取代 ----SharedAccessSignatureKey----
    • ----AzureStorageConnectionString---- 取代為您稍早儲存的儲存體帳戶連接字串。
    • messages 取代 ----StorageContainerName----
    • 以儲存體帳戶名稱取代 ----HostNamePrefix----

    如果您忘記這些值,請切換至編輯器下方的終端機視窗,並執行 echo 命令以列出環境變數。 例如:

    echo $NS_NAME
    echo $HUB_NAME
    echo $STORAGE_NAME
    
  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
    

    建置流程可能需要數分鐘才能完成。 確保您看到 [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. 當看到 [傳送完成] 時,請按 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
    

摘要

在此單元中,您已設定好傳送者應用程式,隨時可以傳送訊息至事件中樞。 您也設定好接收者應用程式,隨時可以從事件中樞接收訊息。