你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

EventHubClient.SendAsync 方法

定义

重载

SendAsync(EventData)

发送到 EventData EventHub。 发送的 EventData 将位于任意选择的 EventHubs 分区上。

有 3 种方法可以发送到 EventHubs,每种方法都公开为方法 (及其 sendBatch 重载) :

i. SendAsync(EventData)SendAsync(IEnumerable<EventData>)

ii. SendAsync(EventData, String)SendAsync(IEnumerable<EventData>, String)

iii. SendAsync(EventData)SendAsync(IEnumerable<EventData>)

在以下的情况下,使用此方法发送:

) SendAsync(EventData) 操作应具有高可用性和

b) 数据需要在所有分区之间均匀分布;例外为,当分区的子集不可用时

SendAsync(EventData)EventData将 发送到服务网关,后者又会将 EventData 转发到 EventHub 的分区之一。 下面是消息转发算法:

i. 通过将数据平均分布到所有分区,将 EventData 转发到 EventHub 分区 (例如:将 EventData 轮询到所有 EventHub 分区)

ii. 如果其中一个 EventHub 分区暂时不可用,服务网关将自动检测它,并将消息转发到另一个可用分区 - 使发送操作高度可用。

SendAsync(EventDataBatch)

在 中EventDataBatch发送一批 。EventData

SendAsync(IEnumerable<EventData>)

将一批 发送到 EventData EventHub。 发送的 EventData 将位于任意选择的 EventHub 分区上。 这是最推荐的发送到 EventHub 的方式。

有 3 种方法可以发送到 EventHubs,若要了解此特定类型的发送,请参阅重载,该重载 SendAsync(EventData)用于发送单个 EventData。 如果需要发送一批 EventData,请使用此重载。

在以下情况下,发送一批 EventData的 很有用:

i. 高效发送 - 发送一批 EventData 通过以最佳方式使用创建到 EventHub 服务的会话数来最大化总体吞吐量。

ii. 在事务中发送多个 EventData。 为了识别 ACID 属性,网关服务会将批处理中的所有 转发 EventData到单个 EventHub 分区。

SendAsync(EventData, String)

将带有 partitionKey 的 'EventData 发送到 EventHub。 所有 EventData具有 partitionKey 的 都保证位于同一分区上。 此发送模式强调数据相关性,不如正式发布和延迟。

有 3 种方法可以发送到 EventHubs,每种方法都公开为方法 (及其批处理重载) :

i. SendAsync(EventData)SendAsync(IEnumerable<EventData>)

ii. SendAsync(EventData, String)SendAsync(IEnumerable<EventData>, String)

iii. SendAsync(EventData)SendAsync(IEnumerable<EventData>)

在以下的情况下使用此类型的发送:

a) 需要关联基于发送方实例的事件;发送方可以生成 UniqueId 并将其设置为 partitionKey - 接收的消息上可用于关联

b) 客户端想要控制跨分区的数据分布。

多个 PartitionKey 可以映射到一个分区。 EventHubs 服务使用专有哈希算法将 PartitionKey 映射到 PartitionId。 使用这种类型的发送 (使用特定分区发送密钥) 有时可能会导致分区分布不均匀。
SendAsync(IEnumerable<EventData>, String)

将具有相同 partitionKey 的 EventData “批”发送到 EventHub。 保证所有 EventData具有 partitionKey 的 都位于同一分区上。 多个 PartitionKey 的 将映射到一个分区。

有 3 种方法可以发送到 EventHubs,若要了解此特定类型的发送,请参阅重载 SendAsync(EventData, String),它是同一类型的发送,用于发送单个 EventData

在以下情况下,发送一批 EventData的 非常有用:

i. 高效发送 - 发送一批 EventData 通过使用创建到 EventHubs 服务的会话数以最佳方式最大化总体吞吐量。

ii. 在一个事务中发送多个事件。 这就是为什么批处理中发送的所有事件都需要具有相同的 partitionKey (,以便仅) 发送到一个分区的原因。

SendAsync(EventData)

Source:
EventHubClient.cs

发送到 EventData EventHub。 发送的 EventData 将位于任意选择的任何 EventHubs 分区上。

有 3 种方法可以发送到 EventHubs,每种方法都作为方法 (公开,以及其 sendBatch 重载) :

i. SendAsync(EventData)SendAsync(IEnumerable<EventData>)

ii. SendAsync(EventData, String)SendAsync(IEnumerable<EventData>, String)

iii. SendAsync(EventData)SendAsync(IEnumerable<EventData>)

在以下的情况下使用此方法发送:

) 操作 SendAsync(EventData) 应高度可用,并且

b) 数据需要在所有分区之间均匀分布;异常为,当分区的子集不可用时

SendAsync(EventData)EventData 发送到服务网关,而服务网关又会将 EventData 转发到 EventHub 的分区之一。 下面是消息转发算法:

i. 通过将数据平均分布到所有分区,将 EventData 转发到 EventHub 分区 (例如:将 EventData 轮循机制分配给所有 EventHub 分区)

ii. 如果其中一个 EventHub 分区暂时不可用,服务网关将自动检测它,并将消息转发到另一个可用分区 ,使发送操作高度可用。

public System.Threading.Tasks.Task SendAsync (Microsoft.Azure.EventHubs.EventData eventData);
member this.SendAsync : Microsoft.Azure.EventHubs.EventData -> System.Threading.Tasks.Task
Public Function SendAsync (eventData As EventData) As Task

参数

eventData
EventData

EventData 发送的 。

返回

完成发送操作时完成的任务。

另请参阅

适用于

SendAsync(EventDataBatch)

Source:
EventHubClient.cs

在 中EventDataBatch发送一批 EventData

public System.Threading.Tasks.Task SendAsync (Microsoft.Azure.EventHubs.EventDataBatch eventDataBatch);
member this.SendAsync : Microsoft.Azure.EventHubs.EventDataBatch -> System.Threading.Tasks.Task
Public Function SendAsync (eventDataBatch As EventDataBatch) As Task

参数

eventDataBatch
EventDataBatch

要发送到 EventHub 的事件批

返回

在发送操作完成时完成的任务。

适用于

SendAsync(IEnumerable<EventData>)

Source:
EventHubClient.cs

将一批 EventData 发送到 EventHub。 发送的 EventData 将位于任意选择的任何 EventHub 分区上。 这是发送到 EventHub 的最推荐方式。

有 3 种方法可以发送到 EventHubs,若要了解此特定类型的发送,请参阅重载 ,该重载 SendAsync(EventData)用于发送单个 EventData。 如果需要发送一批 EventData,请使用此重载。

在以下情况下,发送一批 EventData的 非常有用:

i. 高效发送 - 发送一批 EventData 通过使用创建到 EventHub 服务的会话数以最佳方式最大化总体吞吐量。

ii. 在事务中发送多个 EventData。 为了识别 ACID 属性,网关服务会将批处理中的所有 转发 EventData到单个 EventHub 分区。

public System.Threading.Tasks.Task SendAsync (System.Collections.Generic.IEnumerable<Microsoft.Azure.EventHubs.EventData> eventDatas);
member this.SendAsync : seq<Microsoft.Azure.EventHubs.EventData> -> System.Threading.Tasks.Task
Public Function SendAsync (eventDatas As IEnumerable(Of EventData)) As Task

参数

eventDatas
IEnumerable<EventData>

要发送到 EventHub 的一批事件

返回

完成发送操作时完成的任务。

示例

示例代码:

var client = EventHubClient.Create("__connectionString__");
while (true)
{
    var events = new List<EventData>();
    for (int count = 1; count < 11; count++)
    {
        var payload = new PayloadEvent(count);
        byte[] payloadBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(payload));
        var sendEvent = new EventData(payloadBytes);
        var applicationProperties = new Dictionary<string, string>();
        applicationProperties["from"] = "csharpClient";
        sendEvent.Properties = applicationProperties;
        events.Add(sendEvent);
    }

    await client.SendAsync(events);
    Console.WriteLine("Sent Batch... Size: {0}", events.Count);
}

另请参阅

适用于

SendAsync(EventData, String)

Source:
EventHubClient.cs

将带有 partitionKey 的 'EventData 发送到 EventHub。 保证所有 EventData具有 partitionKey 的 都位于同一分区上。 此发送模式强调与正式发布和延迟相关的数据关联。

有 3 种方法可以发送到 EventHubs,每种方法都作为方法公开 (及其批处理重载) :

i. SendAsync(EventData)SendAsync(IEnumerable<EventData>)

ii. SendAsync(EventData, String)SendAsync(IEnumerable<EventData>, String)

iii. SendAsync(EventData)SendAsync(IEnumerable<EventData>)

在以下的情况下使用此类型的发送:

a) 需要基于发送方实例关联事件;发送方可以生成 UniqueId 并将其设置为 partitionKey - 在接收的消息上,该分区可用于关联

b) 客户端想要控制跨分区的数据分布。

多个 PartitionKey 可以映射到一个分区。 EventHubs 服务使用专有哈希算法将 PartitionKey 映射到 PartitionId。 使用此类型的发送 (使用特定 partitionKey) 发送有时可能会导致分区分布不均匀。
public System.Threading.Tasks.Task SendAsync (Microsoft.Azure.EventHubs.EventData eventData, string partitionKey);
member this.SendAsync : Microsoft.Azure.EventHubs.EventData * string -> System.Threading.Tasks.Task
Public Function SendAsync (eventData As EventData, partitionKey As String) As Task

参数

eventData
EventData

EventData 发送的 。

partitionKey
String

partitionKey 将经过哈希处理,以确定要向其发送 EventData 的 partitionId。 在“已接收”消息中,可以在 上 PartitionKey访问此消息。

返回

在发送操作完成时完成的任务。

另请参阅

适用于

SendAsync(IEnumerable<EventData>, String)

Source:
EventHubClient.cs

将具有相同 partitionKey 的 EventData “批”发送到 EventHub。 保证所有 EventData具有 partitionKey 的 都位于同一分区上。 多个 PartitionKey 的 将映射到一个分区。

有 3 种方法可以发送到 EventHubs,若要了解此特定类型的发送,请参阅重载 SendAsync(EventData, String),它是同一类型的发送,用于发送单个 EventData

在以下情况下,发送一批 EventData的 非常有用:

i. 高效发送 - 发送一批 EventData 通过使用创建到 EventHubs 服务的会话数以最佳方式最大化总体吞吐量。

ii. 在一个事务中发送多个事件。 这就是为什么批处理中发送的所有事件都需要具有相同的 partitionKey (,以便仅) 发送到一个分区的原因。

public System.Threading.Tasks.Task SendAsync (System.Collections.Generic.IEnumerable<Microsoft.Azure.EventHubs.EventData> eventDatas, string partitionKey);
member this.SendAsync : seq<Microsoft.Azure.EventHubs.EventData> * string -> System.Threading.Tasks.Task
Public Function SendAsync (eventDatas As IEnumerable(Of EventData), partitionKey As String) As Task

参数

eventDatas
IEnumerable<EventData>

要发送到 EventHub 的事件批

partitionKey
String

partitionKey 将经过哈希处理,以确定要向其发送 EventData 的 partitionId。 在“已接收”消息中,可以在 上 PartitionKey访问此消息。

返回

在发送操作完成时完成的任务。

另请参阅

适用于