练习 - 将应用程序配置为通过事件中心发送或接收消息
现在,你已准备好为事件中心配置发布者和使用者应用程序。
在本单元中,你将配置应用程序以通过事件中心发送或接收消息。 一个应用程序充当消息发送方 (SimpleSend),另一个充当消息接收方 (EventProcessorSample)。 由于这些应用程序是以 Java 编写的,因此可以在浏览器中进行所有开发、测试和管理。 但是,每个平台(如 .NET)都必须使用相同的配置。 这些应用程序存储在 GitHub 存储库中。
创建通用的标准存储帐户
Java 接收方应用程序将消息存储在 Azure Blob 存储中,这需要存储帐户。 若要创建存储帐户(常规用途 V2),请使用 storage account create
命令。 我们将为此命令定义以下参数:
参数 | 说明 |
---|---|
name(必需) | 存储帐户的名称。 |
资源组(必填) | 资源组所有者是沙盒资源组,已将其定义为默认值。 |
位置(可选) | 已将区域定义为默认值,但如果想要从默认资源组位置设置不同的区域,则可以包括它。 |
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"
运行以下命令在存储帐户中创建一个名为“消息”的容器。 使用在上一步中复制的“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。"Your primary SAS key"
替换为适用于先前所保存的事件中心命名空间的 primaryKey 密钥的值。
如果忘记了这些值,可切换到编辑器下方的终端窗口,运行
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。----SharedAccessSignatureKey----
替换为适用于先前所保存的事件中心命名空间的 primaryKey 密钥的值。----AzureStorageConnectionString----
替换为先前所保存的存储帐户连接字符串。----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
总结
在本单元中,你配置了一个发送方应用程序,可以向事件中心发送消息。 你还配置了一个接收方应用程序,可以从事件中心接收消息。