如何确定批处理的EventData的序列化大小?

时间:2014-12-03 03:35:51

标签: c# azure azureservicebus azure-eventhub

在Azure EventHubClient的文档中,有two methods用于发送一批数据,每个数据都有以下注释,如果有{{}},则会抛出MessageSizeExceededException被忽略了。

  

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

Programming Guide

中出现类似警告

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

传递给每个EventData的字节大小很容易确定,假设您没有ask the EventData。但是,EventData的序列化形式可能包含Partition Key中使用的user propertiessample

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

目前我的唯一选择看起来像批量调整一样保守。

1 个答案:

答案 0 :(得分:2)

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

--- EventDataBatch实用程序--- 后更新

使用EventDataBatch.TryAdd(EventData) API构建批处理。如果EventData无法放入批处理中,则此API将返回false。停止添加更多活动&amp;然后使用发件人(EventHubClientPartitionSender)发送EventDataBatch

以下注意事项促使我们设计EventDataBatch API:

  • 帮助开发人员使用我们的客户端API - 处理批量EventData
  • 的大小
  • 抽象出全区域范围/基于SKU的MaximumMessageSize配置:全球EventHubs服务可能有不同的Max EventData尺寸 - 跨越不同的EventHub区域和不同的{{ 1}} SKU。我们希望为开发人员提供一种统一的方法来为任何给定的环境构造EventHub。因此,当使用maximum message size API初始化EventDataBatch时,客户端会与eventHubClient.createBatch()协商batchSize并返回可构造正确大小的EventHubs Service实例!

HTH! SREE