private static async Task <EventHubReceiver> CreateReceiver(EventHubPartitionSettings partitionSettings, string offset, Logger logger) { bool offsetInclusive = true; EventHubClient client = EventHubClient.CreateFromConnectionString(partitionSettings.Hub.ConnectionString, partitionSettings.Hub.Path); EventHubConsumerGroup consumerGroup = client.GetConsumerGroup(partitionSettings.Hub.ConsumerGroup); if (partitionSettings.Hub.PrefetchCount.HasValue) { consumerGroup.PrefetchCount = partitionSettings.Hub.PrefetchCount.Value; } // if we have a starting offset or if we're not configured to start reading from utc now, read from offset if (!partitionSettings.Hub.StartFromNow || offset != EventHubConsumerGroup.StartOfStream) { logger.Info("Starting to read from EventHub partition {0}-{1} at offset {2}", partitionSettings.Hub.Path, partitionSettings.Partition, offset); } else { // to start reading from most recent data, we get the latest offset from the partition. PartitionRuntimeInformation patitionInfo = await client.GetPartitionRuntimeInformationAsync(partitionSettings.Partition); offset = patitionInfo.LastEnqueuedOffset; offsetInclusive = false; logger.Info("Starting to read latest messages from EventHub partition {0}-{1} at offset {2}", partitionSettings.Hub.Path, partitionSettings.Partition, offset); } return(await consumerGroup.CreateReceiverAsync(partitionSettings.Partition, offset, offsetInclusive)); }
public PartitionViewModel(PartitionRuntimeInformation info) { this.PartitionId = info.PartitionId; BeginSequenceNumber = info.BeginSequenceNumber; LastSequenceNumber = info.LastEnqueuedSequenceNumber; Offset = info.LastEnqueuedOffset; MessageCount = LastSequenceNumber - BeginSequenceNumber; if (MessageCount != 0) { MessageCount++; } }
static void Main(string[] args) { EventHubClient client = EventHubClient.CreateFromConnectionString(connectionString, eventHubName); List <string> countResults = new List <string>(); countResults.Add(eventHubName); for (int partitionId = 0; partitionId < partitonCount; partitionId++) { PartitionRuntimeInformation item = client.GetPartitionRuntimeInformation(partitionId.ToString()); long count = (item.LastEnqueuedSequenceNumber - (item.BeginSequenceNumber + 1)); string countString = "Partition: " + partitionId + ", LastEnqueuedSequenceNumber: " + item.LastEnqueuedSequenceNumber + ", BeginSequenceNumber: " + item.BeginSequenceNumber + ", Count: " + count; countResults.Add(countString); WriteOutResults(countResults); } }
static async Task MonitorEventHub() { EventHubRuntimeInformation runtimeInfo = await _client.GetRuntimeInformationAsync(); Console.WriteLine($"Partition count: {runtimeInfo.PartitionCount}"); long[] sequenceNumbers = new long[runtimeInfo.PartitionCount]; for (;;) { var tasks = new Task <PartitionRuntimeInformation> [runtimeInfo.PartitionCount]; for (int i = 0; i < runtimeInfo.PartitionCount; i++) { tasks[i] = _client.GetPartitionRuntimeInformationAsync(i.ToString()); } // Wait for all of them await Task.WhenAll(tasks); for (int i = 0; i < runtimeInfo.PartitionCount; i++) { PartitionRuntimeInformation part = tasks[i].GetAwaiter().GetResult(); Console.WriteLine($"BeginSequenceNumber: {part.BeginSequenceNumber}, LastEnqueuedOffset: {part.LastEnqueuedOffset}, LastEnqueuedSequenceNumber: {part.LastEnqueuedSequenceNumber}, LastEnqueuedTime: {part.LastEnqueuedTimeUtc}"); if (sequenceNumbers[i] != 0) { if (part.LastEnqueuedSequenceNumber != sequenceNumbers[i]) { Console.WriteLine($"Sequence when up by {part.LastEnqueuedSequenceNumber - sequenceNumbers[i]} for partition {i}!"); } } sequenceNumbers[i] = part.LastEnqueuedSequenceNumber; } System.Threading.Thread.Sleep(5000); } }