我正在使用Azure Event Hub。我打算发送事件并使用SendBatchAsync。我看到事件中心的限制为256KB(无论是单独发送还是批量发送)

那么,如果我的数据> 256KB,什么是最佳做法?我们是否应该单独发送消息(这将保证它小于256KB)?

此外,如何将事件拆分为256KB的块并发送到事件中心?
我查看了Azure文档,看到他们建议使用EventHubClient.CreateBatch,但是我没有看到足够的示例。有人可以提供一些模型或样本,还是我们最终如何将其拆分为256KB和SendBatchAsync所需的步骤

这是我的工作(但不限制256KB的限制)

await myEventHubClient.SendBatchAsync(
    events.Select(
        iEvent =>
            new EventData(
                Encoding.UTF8.GetBytes(JsonConvert.SerializeObject( iEvent ) ) ) ) );

最佳答案

不要尝试在多个消息中对单个有效载荷进行分块,考虑到不能保证事件按顺序到达,可能以不同的分区结束并且可能间隔一定的时间到达并且可以删除,因此跟踪和重构变得极其困难。独立于“公共汽车”。从规模上讲,这甚至更具挑战性。

选项1:如果您的有效载荷是text / json并且消息大小不超过256kb,请考虑压缩有效载荷。您可以从this online tool了解尺寸结果。如果您的有效负载中有很多空白(例如JSON),也可以minify而不是压缩。

选项2:将有效负载存储在外部存储中(例如DocumentDB或Blob存储)。

在事件中发送对您的有效负载的引用。这样可以使事件保持精简,但是用户需要了解如何检索有效负载的知识。一种简单的方法是将有效负载的链接显示为URI,显然,您可能需要根据事件中心访问策略考虑对有效负载存储进行身份验证和授权,以使其保持流畅。

10-01 17:38