c# - 如何在 Azure 事件中心中使用批处理消息设置分区键?
问题描述
我从文件中读取行(我们称之为customers
)并将它们发布到事件中心。每行包含一个customer_id
和一些数据。同一客户可能在文件中出现多次。所以我想customer_id
用作分区键来保证为同一个客户保留订单,同时出于性能原因仍然批量发送消息。似乎很容易...
因此,您可以使用在消息或批次上设置分区
var opts = new SendEventOptions() {
PartitionKey = customer.CustomerId
};
client.SendAsync(messages, opts);
但这会在批次本身上设置分区键,这将使批次中的所有消息都具有相同的键
甚至可以在每条消息上设置分区键并仍然以理智的方式使用批处理吗?最好我想在每条消息上设置密钥,然后将它们添加到批处理中并发送。
我正在使用Azure.Messaging.EventHubs
命名空间和 C#。
解决方案
不幸的是,您想要做的事情是不可能的。事件中心服务要求为批处理中的所有事件分配相同的分区键。
使用分区键的最佳选择是为您正在使用的每个分区键构建一个批处理,并在处理时添加到它们,当已满或某个刷新阈值已过时发送。
或者,您可以将每个客户标识符分配给特定分区,然后使用上述方法为每个分区构建一个批次。这会更有效率,因为您需要管理的批次数量较少,并且可能会更快地填充每个批次。
推荐阅读
- java - 找不到使用@Named#value 注释的方法
- java - 我正在使用 IntelliJ,但无法在其上输出,我该怎么做?
- azure-machine-learning-service - 读取镶木地板文件失败
- apache - 想将我的网站从 www 重定向到 non.www https
- flutter - 'Set
' can't be assigned to the parameter type 'Widget'. [Provider] - matrix - 在 Pytorch 中创建一个 knn 相邻矩阵
- php - Square 中的交易不工作的描述
- c# - 使用 C# 在 Selenium 中使用 Opera 浏览器进行无头测试是否可行
- swift - 静态属性错误类型,类型 Hourly TableViewCell 没有成员“标识符”
- ffmpeg - 如果视频输入不是 16:9,FFMPEG 会在图像中添加黑条