首页 > 解决方案 > 如何在 Azure 事件中心中使用批处理消息设置分区键?

问题描述

我从文件中读取行(我们称之为customers)并将它们发布到事件中心。每行包含一个customer_id和一些数据。同一客户可能在文件中出现多次。所以我想customer_id用作分区键来保证为同一个客户保留订单,同时出于性能原因仍然批量发送消息。似乎很容易...

因此,您可以使用在消息或批次上设置分区

   var opts = new SendEventOptions() {
       PartitionKey = customer.CustomerId
   };
   client.SendAsync(messages, opts);

但这会在批次本身上设置分区键,这将使批次中的所有消息都具有相同的键

甚至可以在每条消息上设置分区键并仍然以理智的方式使用批处理吗?最好我想在每条消息上设置密钥,然后将它们添加到批处理中并发送。

我正在使用Azure.Messaging.EventHubs命名空间和 C#。

标签: c#azureazure-eventhub

解决方案


不幸的是,您想要做的事情是不可能的。事件中心服务要求为批处理中的所有事件分配相同的分区键。

使用分区键的最佳选择是为您正在使用的每个分区键构建一个批处理,并在处理时添加到它们,当已满或某个刷新阈值已过时发送。

或者,您可以将每个客户标识符分配给特定分区,然后使用上述方法为每个分区构建一个批次。这会更有效率,因为您需要管理的批次数量较少,并且可能会更快地填充每个批次。


推荐阅读