Да, вы можете включить объект PartitionContext как часть подписи, которая даст вам некоторую дополнительную информацию,
public static async Task Run([EventHubTrigger("HubName",
Connection = "EventHubConnectionStringSettingName",
ConsumerGroup = "Consumer-Group-If-Applicable")] EventData[] messageBatch, PartitionContext partitionContext, ILogger log)
Отредактируйте ваш host.json и установите для enableReceiverRuntimeMetric значение true, например,
"version": "2.0",
"extensions": {
"eventHubs": {
"batchCheckpointFrequency": 100,
"eventProcessorOptions": {
"maxBatchSize": 256,
"prefetchCount": 512,
"enableReceiverRuntimeMetric": true
}
}
}
Теперь вы получаете доступ к RuntimeInformation в PartitionContext, который содержит некоторую информацию о LastSequenceNumber, а ваше текущее сообщение имеет свой собственный порядковый номер, так что вы можете использовать разницу между ними для вычисления метрики, например, что-то вроде
public class EventStreamBacklogTracing
{
private static readonly Metric PartitionSequenceMetric =
InsightsClient.Instance.GetMetric("PartitionSequenceDifference", "PartitionId", "ConsumerGroupName", "EventHubPath");
public static void LogSequenceDifference(EventData message, PartitionContext context)
{
var messageSequence = message.SystemProperties.SequenceNumber;
var lastEnqueuedSequence = context.RuntimeInformation.LastSequenceNumber;
var sequenceDifference = lastEnqueuedSequence - messageSequence;
PartitionSequenceMetric.TrackValue(sequenceDifference, context.PartitionId, context.ConsumerGroupName,
context.EventHubPath);
}
}
Я написал статью на носителе, в которой более подробно рассказывается, как вы можете использовать данные в графане,
https://medium.com/@dylanm_asos/azure-functions-event-hub-processing-8a3f39d2cd0f