練習 - 設定應用程式透過事件中樞傳送或接收訊息
現在您已準備就緒,可以設定事件中樞發行者和取用者應用程式。
在此單元中,您將設定應用程式以透過事件中樞傳送或接收訊息。 其中一個應用程式作為訊息傳送者 (SimpleSend),另一個作為訊息接收者 (EventProcessorSample)。 因為這些應用程式以 JAVA 撰寫,所以您可以在瀏覽器中執行所有的開發、測試和管理。 不過,每個平台都必須使用相同的設定,例如 .NET。 這些應用程式會儲存在 GitHub 存放庫。
建立一般用途的標準儲存體帳戶
JAVA 接收者應用程式將訊息儲存在 Azure Blob 儲存體,所以會需要儲存體帳戶。 使用 storage account create
命令建立儲存體帳戶 (一般用途 V2)。 我們會針對此命令定義下列參數:
參數 | 描述 |
---|---|
名稱 (必要) | 儲存體帳戶的名稱。 |
資源群組 (必要) | 資源群組擁有者是沙箱資源群組,並已定義為預設值。 |
位置 (選用) | 區域已定義為預設值,但如果您要設定與預設資源群組位置不同的區域,便可包括此選項。 |
SKU | 儲存體帳戶的預設 SKU 值為 Standard_RAGRS。 但在此練習中,我們會指定該值。 |
在上一個練習中,我們已定義資源群組和位置的預設值,所以可以從命令略這些參數。
在 Azure Cloud Shell 中,將儲存體帳戶名稱設為變數。 儲存體帳戶名稱必須是 Azure 中的唯一名稱,且必須包含 3 到 24 個數字或小寫字母。
STORAGE_NAME=storagename$RANDOM
執行下列命令,建立儲存體帳戶。
az storage account create --name $STORAGE_NAME --sku Standard_RAGRS --encryption-service blob
提示
建立此儲存體帳戶可能需要一點時間。 如果儲存體帳戶建立失敗,請變更環境變數,然後再試一次。
執行下列命令,以取得儲存體帳戶相關的存取金鑰。
az storage account keys list --account-name $STORAGE_NAME
與儲存體帳戶相關的兩個金鑰會以 JSON 格式輸出。 複製並儲存 key1 的值備用。 需要使用此金鑰才能存取您的儲存體帳戶。
執行下列命令,取得儲存體帳戶的連接字串。
az storage account show-connection-string -n $STORAGE_NAME
輸出內容會包含儲存體帳戶的連線詳細資料。 複製並儲存 connectionString 的值。 其外觀應該如下所示:
"DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=storage_account_name;AccountKey=xxxxxxxxxxx"
執行下列命令,在儲存體帳戶中建立名為 messages 的容器。 使用在上一個步驟中複製的 connectionString 值。
az storage container create --name messages --connection-string "<connection string here>"
複製事件中樞 GitHub 存放庫
在 Cloud Shell 中,使用 git
複製事件中樞 GitHub 存放庫。 您在此單元中建置之應用程式的來源檔案均位於 GitHub 存放庫。
執行下列命令,確認您位於 Cloud Shell 的主目錄,然後複製此存放庫。
cd ~ git clone https://github.com/Azure/azure-event-hubs.git
此存放庫會複製到您的主目錄。
編輯 SimpleSend.java
在此練習中,您會使用內建的 Cloud Shell 編輯器來修改 SimpleSend 應用程式。 您必須新增事件中樞命名空間、事件中樞名稱、共用存取原則名稱和主索引鍵。
變更至 SimpleSend 資料夾。
cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend/src/main/java/com/microsoft/azure/eventhubs/samples/SimpleSend
在目前的資料夾中開啟 Cloud Shell 編輯器。
code .
目前資料夾中的檔案會列在左側功能表中,而右側的編輯器空間會顯示標題列中所列的檔案名稱內容。
如果檔案未開啟,請從檔案清單選取 SimpleSend.java 開啟檔案。
在此編輯器中,找到並取代 `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 原則金鑰。
- 以事件中樞命名空間名稱取代
儲存 SimpleSend.java 檔案,然後關閉編輯器。 在編輯器右上角選取,並使用 [儲存] 和 [關閉編輯器] 功能表項目。
使用 Maven 建置 SimpleSend.java
現在,您將執行 mvn 命令來建置 JAVA 應用程式。
在 Cloud Shell 中,輸入下列命令,瀏覽至主要的 [SimpleSend] 資料夾。
cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend
建置 Java SimpleSend 應用程式。 此命令使用事件中樞的連線詳細資料來組建應用程式。
mvn clean package -DskipTests
建置流程可能需要數分鐘才能完成。 確定您看到 [INFO] BUILD SUCCESS 訊息再繼續。
編輯 EventProcessorSample.java
現在要設定接收者 (也稱為訂閱者或取用者) 應用程式,以從事件中樞內嵌資料。
如果是接收者應用程式,您可以使用這兩個類別:EventHubReceiver 或 EventProcessorHost。 EventProcessorHost 以 EventHubReceiver 為組建基礎,但提供比 EventHubReceiver 更簡單的程式設計介面。 EventProcessorHost 可以使用相同的儲存體帳戶,在 EventProcessorHost 多個執行個體自動分配訊息分割區。
在此程序中,您會使用 EventProcessorHost
方法。 編輯 EventProcessorSample 應用程式來新增下列值:您的事件中樞命名空間、事件中樞名稱、共用存取原則名稱和主索引鍵、儲存體帳戶名稱,連接字串以及容器名稱。
執行下列命令,變更為 [EventProcessorSample] 資料夾。
cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample/src/main/java/com/microsoft/azure/eventhubs/samples/eventprocessorsample
開啟 Cloud Shell 編輯器。
code .
選取左側檔案總管中的 EventProcessorSample.java 檔案。
在此編輯器中,尋找並取代下列字串:
- 以事件中樞命名空間名稱取代
----EventHubNamespaceName----
。 - 將
----EventHubName----
取代為您的事件中樞名稱。 - 將
----SharedAccessSignatureKeyName----
取代為 RootManageSharedAccessKey。 - 以之前儲存的事件中樞命名空間的 primaryKey 金鑰值,取代
----SharedAccessSignatureKey----
。 - 將
----AzureStorageConnectionString----
取代為您稍早儲存的儲存體帳戶連接字串。 - 以 messages 取代
----StorageContainerName----
。 - 以儲存體帳戶名稱取代
----HostNamePrefix----
。
如果您忘記這些值,請切換至編輯器下方的終端機視窗,並執行
echo
命令以列出環境變數。 例如:echo $NS_NAME echo $HUB_NAME echo $STORAGE_NAME
- 以事件中樞命名空間名稱取代
透過 [...] 功能表或快速鍵 (Windows 和 Linux 上的 Ctrl+S 與 macOS 上的 Cmd+S) 儲存 EventProcessorSample.java。
關閉編輯器。
使用 Maven 建置 EventProcessorSample.java
執行下列命令,變更為主要的 [EventProcessorSample] 資料夾。
cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample
為確保應用程式使用事件中樞的連線詳細資料,請執行下列命令來組建 JAVA SimpleSend 應用程式。
mvn clean package -DskipTests
建置流程可能需要數分鐘才能完成。 確保您看到 [INFO] BUILD SUCCESS 訊息,再繼續作業。
啟動傳送者和接收者應用程式
執行以下
java
命令並指定 .jar 套件,以從命令列執行 JAVA 應用程式。 執行下列命令,啟動 SimpleSend 應用程式。cd ~/azure-event-hubs/samples/Java/Basic/SimpleSend java -jar ./target/simplesend-1.0.0-jar-with-dependencies.jar
當看到 [傳送完成] 時,請按 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...
執行下列命令,啟動 EventProcessorSample 應用程式。
cd ~/azure-event-hubs/samples/Java/Basic/EventProcessorSample java -jar ./target/eventprocessorsample-1.0.0-jar-with-dependencies.jar
主控台停止顯示訊息後,請按 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
摘要
在此單元中,您已設定好傳送者應用程式,隨時可以傳送訊息至事件中樞。 您也設定好接收者應用程式,隨時可以從事件中樞接收訊息。