4

在 Azure EventHubClient的文档中,有两种 发送一批数据的方法,每种方法都有下面的注释,如果被忽略,则会抛出MessageSizeExceededException

您应该确保 eventDataList 的总序列化大小小于一次事件数据传输的大小限制,默认为 256k。

编程指南中存在类似的警告

如何IEnumerable<EventData> eventDataList确定的序列化大小?

假设您不询问 EventData ,传递给每个EventData的字节大小很容易确定。但是,EventData 的序列化形式可能包括示例中使用的分区键用户属性

data.Properties.Add("Type","Telemetry_" + DateTime.Now.ToLongTimeString());

目前,我唯一的选择似乎是对批量大小保守。

4

1 回答 1

3

----Nuget 更新后更新----这是我们在最近的 SDK 迭代中引入 的 EventData 属性 - SerializedSizeInBytes - 它解决了这个特定问题 - 在2.6 以上的所有 sdk nuget中都可用。

---EventDataBatch实用后更新---

使用EventDataBatch.TryAdd(EventData)API 构建批次。当EventData无法放入批次时 - 此 API 将返回false。停止添加更多事件,然后使用发送者(EventHubClientPartitionSender)发送EventDataBatch.

以下考虑促使我们设计EventDataBatchAPI:

  • 帮助开发人员使用我们的客户端 API - 处理批量大小EventData
  • 抽象出区域范围/基于 SKU 的MaximumMessageSize配置:EventHubs世界各地的服务可能有不同的Max EventData规模 - 跨不同的EventHub区域和不同SKUEventHub. 我们希望为开发人员公开一种maximum message size针对任何给定环境进行构建的统一方式。因此,当EventDataBatch使用eventHubClient.createBatch()API 初始化时 - 客户端与实例协商batchSizeEventHubs Service返回EventDataBatch可以构造正确大小的实例!

!斯里

于 2014-12-05T22:05:24.863 回答