问题
In the documentation for the Azure EventHubClient there are two methods for sending a batch of data each of them has the remark below and will throw a MessageSizeExceededException if it is ignored.
You should ensure that the total serialized size of eventDataList is less than the size limit of one event data transmission, which is 256k by default.
A similar warning is present in the Programming Guide
How can the serialized size of IEnumerable<EventData> eventDataList be determined?
The size of the bytes passed to each EventData is easy enough to determine, assuming you don't ask the EventData. However, the serialized form of an EventData presumably includes the Partition Key and user properties as used in the sample.
data.Properties.Add("Type","Telemetry_" + DateTime.Now.ToLongTimeString());
Currently my only option looks like being conservative with batch sizing.
回答1:
----Updating after the Nuget Update---- Here's the EventData property - SerializedSizeInBytes that we introduced in our recent SDK iteration - which addresses this specific problem - available in all sdk nugets above 2.6 .
---Update after EventDataBatch utility---
use EventDataBatch.TryAdd(EventData) API to construct the batch. When the EventData cannot fit into the batch - this API will return false. Stop adding more events & then use the sender (EventHubClient or PartitionSender) to send the EventDataBatch.
following considerations motivated us to design EventDataBatch API:
- Help developers using our Client API - to deal with size of batch of
EventData - Abstract out region-wide/SKU-based
MaximumMessageSizeconfiguration:EventHubsservice across the world could have differentMax EventDatasizes - across differentEventHubregions and differentSKUs ofEventHub. We wanted to expose a uniform way for developers to constructmaximum message sizefor any given environment. So, whenEventDataBatchis initialized usingeventHubClient.createBatch()API - the client negotiatesbatchSizewithEventHubs Serviceand returns theEventDataBatchinstance which can construct the correct size!
HTH! Sree
来源:https://stackoverflow.com/questions/27263189/how-can-the-serialized-size-of-eventdata-be-determined-for-batching