如何获取通过 Azure 功能事件中心触发器接收到的事件的 messageId 或 eventId?
How to obtain the messageId or eventId of an event received via the Azure functions Event Hub Trigger?
我有一个链接到事件中心的事件中心触发器函数,我已将其设置为接收事件。接收消息工作正常,当它从源中触发时我能够处理消息,但最近我开始注意到接收方处理了重复的事件。
如何确定这些事件是否是唯一事件,可能具有相同的负载或多次处理相同的事件?我已经阅读了有关分区 ID 的信息,但似乎只告诉我们消息是从哪个分区获取的。很可能两条消息都是在某个时间间隔从同一个分区中提取的。
我的事件中心触发器实现如下所示:
[FunctionName("function-name")]
public async Task RunAsync(
[EventHubTrigger("az_eventhubname",
Connection = "connection-string-path", ConsumerGroup = "%AzureEventHubConsumerName%")] EventData ed,
ExecutionContext eCtx, PartitionContext PartitionContext)
{
var messageBody = Encoding.UTF8.GetString((ed).Body);
// other tasks ...
}
我可以同时绑定 ExecutionContext
和 PartitionContext
,但其中 none 提供了消息 ID 或事件 ID 属性,EventData
也没有
EventData
在其SystemProperties
. 中仅提供序列号、偏移量和入队时间
PartitionContext
提供分区 ID 和其他信息,例如主机 ID、偏移量、纪元、令牌等。
ExecutionContext
提供调用 id
如果事件中心触发器不提供消息 ID 或事件 ID,我如何区分具有相同负载的 2 条消息?
事件中心内没有很强的事件标识概念;定义事件独特性的责任落在了应用程序身上。仅使用事件中心服务数据最接近的近似值是分配给事件的序列号和从中读取事件的分区的组合。
通常,鼓励发布者和消费者在 Properties
字典中的一个项目集上进行协调,该项目集在应用程序上下文中有意义以识别数据。
我有一个链接到事件中心的事件中心触发器函数,我已将其设置为接收事件。接收消息工作正常,当它从源中触发时我能够处理消息,但最近我开始注意到接收方处理了重复的事件。
如何确定这些事件是否是唯一事件,可能具有相同的负载或多次处理相同的事件?我已经阅读了有关分区 ID 的信息,但似乎只告诉我们消息是从哪个分区获取的。很可能两条消息都是在某个时间间隔从同一个分区中提取的。
我的事件中心触发器实现如下所示:
[FunctionName("function-name")]
public async Task RunAsync(
[EventHubTrigger("az_eventhubname",
Connection = "connection-string-path", ConsumerGroup = "%AzureEventHubConsumerName%")] EventData ed,
ExecutionContext eCtx, PartitionContext PartitionContext)
{
var messageBody = Encoding.UTF8.GetString((ed).Body);
// other tasks ...
}
我可以同时绑定 ExecutionContext
和 PartitionContext
,但其中 none 提供了消息 ID 或事件 ID 属性,EventData
也没有
EventData
在其SystemProperties
. 中仅提供序列号、偏移量和入队时间
PartitionContext
提供分区 ID 和其他信息,例如主机 ID、偏移量、纪元、令牌等。ExecutionContext
提供调用 id
如果事件中心触发器不提供消息 ID 或事件 ID,我如何区分具有相同负载的 2 条消息?
事件中心内没有很强的事件标识概念;定义事件独特性的责任落在了应用程序身上。仅使用事件中心服务数据最接近的近似值是分配给事件的序列号和从中读取事件的分区的组合。
通常,鼓励发布者和消费者在 Properties
字典中的一个项目集上进行协调,该项目集在应用程序上下文中有意义以识别数据。