在Azure EventHubClient的文档中,有two methods用于发送一批数据,每个数据都有以下注释,如果有{{}},则会抛出MessageSizeExceededException被忽略了。
中出现类似警告您应该确保eventDataList的序列化总大小小于一个事件数据传输的大小限制,默认为256k。
如何确定IEnumerable<EventData> eventDataList
的序列化大小?
传递给每个EventData的字节大小很容易确定,假设您没有ask the EventData。但是,EventData的序列化形式可能包含Partition Key中使用的user properties和sample。
data.Properties.Add("Type","Telemetry_" + DateTime.Now.ToLongTimeString());
目前我的唯一选择看起来像批量调整一样保守。
答案 0 :(得分:2)
---- Nuget更新后更新---- 这是我们在最近的SDK迭代中引入的EventData属性 - SerializedSizeInBytes - 解决了这个特定问题 - 可在所有sdk nugets above 2.6 中使用。
--- EventDataBatch
实用程序--- 后更新
使用EventDataBatch.TryAdd(EventData)
API构建批处理。如果EventData
无法放入批处理中,则此API将返回false
。停止添加更多活动&amp;然后使用发件人(EventHubClient
或PartitionSender
)发送EventDataBatch
。
以下注意事项促使我们设计EventDataBatch
API:
EventData
MaximumMessageSize
配置:全球EventHubs
服务可能有不同的Max EventData
尺寸 - 跨越不同的EventHub
区域和不同的{{ 1}} SKU
。我们希望为开发人员提供一种统一的方法来为任何给定的环境构造EventHub
。因此,当使用maximum message size
API初始化EventDataBatch
时,客户端会与eventHubClient.createBatch()
协商batchSize
并返回可构造正确大小的EventHubs Service
实例!HTH! SREE