azure - 将大于 256KB 的事件推送到 Azure EventHub

标签 azure azureservicebus azure-eventhub

我正在使用Azure 事件中心。我计划发送事件并使用 SendBatchAsync。我发现事件中心的限制为 256KB (无论是单独发送还是批量发送)

那么,如果我的数据 > 256KB,处理此问题的最佳实践是什么?我们是否应该单独发送消息(这将保证消息< 256KB)?

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

这是我所做的(但不考虑 256KB 限制)

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

最佳答案

不要尝试将单个有效负载分块到多个消息中,考虑到事件不能保证按顺序到达,可能最终会出现在不同的分区中,并且可能会相隔一段时间到达,因此跟踪和重构会变得极其困难。可以独立于“总线”移除。从规模上看,这变得更具挑战性。

选项 1:如果您的有效负载是文本/json 并且您的消息大小不大于 256kb,请考虑压缩有效负载。您可以从this online tool了解尺寸结果。如果您的有效负载中有大量空格(例如 JSON),您还可以 minify而不是压缩。

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

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

关于azure - 将大于 256KB 的事件推送到 Azure EventHub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46701873/

相关文章:

azure-eventhub - 以编程方式查询事件中心使用者组(并在需要时创建)

azure - 当源列为 NULL 或 0 时,用 0 填充 hashbytes 列

azure - 将 Cosmos DB(作为服务端点)作为后端服务器与应用程序网关连接

azure - 新的 ms botbuilder 直线语音是否适合调用中心场景?

SignalR 服务总线主题名称冲突

Azure 服务总线 - 放弃的消息返回到同一订阅者

azure - 尝试监听 Azure 事件中心时出现未经授权的错误

reactjs - 将应用程序从react-azure-adb2c移植到react-aad

Azure服务总线队列: Messages are not being sent

c# - Azure Functions 事件中心绑定(bind)重试