为什么Azure事件中心EventData的PartitionKey字段为空?
我正在使用Azure Functions 1.x从Azure事件中心消费为什么Azure事件中心EventData的PartitionKey字段为空?,azure,azure-functions,azure-webjobs,azure-eventhub,Azure,Azure Functions,Azure Webjobs,Azure Eventhub,我正在使用Azure Functions 1.x从Azure事件中心消费EventData事件。但是,我注意到PartitionKey总是空的。然而,Offset和SequenceNumber都被填充 我知道发件人可以选择设置PartitionKey。事实上,设置它并不是为了性能。但是,我假设在到达消费者的过程中,PartitionKey将与处理EventData的分区一起设置 如果不是这样,那么发送偏移量和序列号有什么意义?每个分区维护自己的偏移量和序列号。如果我想重播一个事件,在不知道Par
EventData
事件。但是,我注意到PartitionKey
总是空的。然而,Offset
和SequenceNumber
都被填充
我知道发件人可以选择设置PartitionKey
。事实上,设置它并不是为了性能。但是,我假设在到达消费者的过程中,PartitionKey
将与处理EventData
的分区一起设置
如果不是这样,那么发送偏移量
和序列号
有什么意义?每个分区维护自己的偏移量
和序列号
。如果我想重播一个事件,在不知道PartitionKey
的情况下如何重播
编辑:
我刚刚发现,如果绑定到
PartitionContext
,我可以查看EventData
来自的PartitionId
。为什么不使用它来填充EventData
上的PartitionKey
?这是Azure函数的错误吗?您应该能够从EventData对象获取partitionKey属性。请参阅,分区键来自分区ID
:
PartitionId与PartitionKey不同。分区键用于
确保相同的分区密钥位于相同的分区ID上。你可以
将分区关系的PartitionKey视为“f(PartitionKey)=
“partitionId”,其中f是散列函数
如所述,如果发件人未设置分区键,则分区键将为空
您可以使用PartitionContext
绑定来访问Azure函数中的PartitionId
。我曾经/正在使用EventData
,但正如我所说,PartitionKey
是null
。如果在发送消息时未设置分区键,那么EventData对象将不会设置PartitionKey属性。这种行为甚至在使用EventProcessorHost(Azure函数使用的接收器)的控制台应用程序中也会重新出现。也许您可以向ServiceBus团队提出关于此行为的问题