Azure事件中心-无法理解Java流

时间:2019-09-19 08:39:25

标签: azure azure-devops azure-eventhub azure-monitoring

来自Microsoft EventHub Java SDK示例(https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-java-get-started-send),这些步骤是通过Java SDK能够使用Even-Hub消息的步骤:

1。创建一个存储帐户

2。创建一个名为EventProcessorSample的新类。用创建事件中心和存储帐户时使用的值替换占位符:

3。

  String consumerGroupName = "$Default";
   String namespaceName = "----NamespaceName----";
   String eventHubName = "----EventHubName----";
   String sasKeyName = "----SharedAccessSignatureKeyName----";
   String sasKey = "----SharedAccessSignatureKey----";
   String storageConnectionString = "----AzureStorageConnectionString----";
   String storageContainerName = "----StorageContainerName----";
   String hostNamePrefix = "----HostNamePrefix----";

   ConnectionStringBuilder eventHubConnectionString = new ConnectionStringBuilder()
        .setNamespaceName(namespaceName)
        .setEventHubName(eventHubName)
        .setSasKeyName(sasKeyName)
        .setSasKey(sasKey);

对于此流程,我有几件事不了解-

A。为什么需要一个存储帐户?为什么仅在创建使用者时才需要创建它,而在创建事件中心本身时却不需要创建它?

B。什么是“ hostNamePrefix”,为什么需要?

C。关于A的更多概括,但我无法理解为什么此流程如此复杂且需要如此多的配置。事件中心是从Azure导出指标/监视数据的默认且唯一的方法,这是非常简单的流程-Azure->事件中心-> Java应用程序。我想念一个更简单的方法还是一个更简单的客户端选项?

1 个答案:

答案 0 :(得分:1)

您所有的问题都与使用事件中心的事件有关。

  

为什么需要一个存储帐户?

  1. 仅读取一次事件:只要您的应用程序要从事件中心读取事件,就需要将offset(已读取事件的数量的标识符)值存储在某个位置。此信息的存储称为“ CheckPointing ”,该信息将存储在存储帐户中。
  2. 在您的应用每次连接时都从头开始读取事件:在这种情况下,您的应用将从头开始就一直从头开始读取事件。

因此,如果您只想读取一次事件,则在使用事件中心的事件时,需要存储帐户存储偏移值。

  

为什么只有在创建使用者时才需要创建它,为什么不创建   创建事件中心本身时是什么?

根据情况而定,您是要仅一次读取还是每次每次读取事件,这就是您的应用启动的原因,因此创建事件时不需要存储帐户集线器。

  

什么是“ hostNamePrefix”?为什么需要?

名称如“ hostNamePrefix ”所示,这是您的主机的名称。主机表示正在使用事件的应用程序。并且,将GUID用作hostNamePrefix是一个好习惯。事件中心需要HostNamePrefix来管理与主机的连接。如果您有32个分区,并且已部署了同一应用程序的4个实例,则每个8个分区将分配给您的4个不同实例,在这里主机名可帮助事件中心管理有关连接的信息。各自的主机分区。

我建议您阅读this article on event hub,以清楚了解事件处理器主机。