public async Task InspectPartition() { #region Snippet:EventHubs_Sample03_InspectPartition var connectionString = "<< CONNECTION STRING FOR THE EVENT HUBS NAMESPACE >>"; var eventHubName = "<< NAME OF THE EVENT HUB >>"; var consumerGroup = EventHubConsumerClient.DefaultConsumerGroupName; /*@@*/ /*@@*/ connectionString = EventHubsTestEnvironment.Instance.EventHubsConnectionString; /*@@*/ eventHubName = _scope.EventHubName; var consumer = new EventHubConsumerClient(consumerGroup, connectionString, eventHubName); try { string[] partitions = await consumer.GetPartitionIdsAsync(); string firstPartition = partitions.FirstOrDefault(); PartitionProperties partitionProperties = await consumer.GetPartitionPropertiesAsync(firstPartition); Debug.WriteLine($"Partition: { partitionProperties.Id }"); Debug.WriteLine($"\tThe partition contains no events: { partitionProperties.IsEmpty }"); Debug.WriteLine($"\tThe first sequence number is: { partitionProperties.BeginningSequenceNumber }"); Debug.WriteLine($"\tThe last sequence number is: { partitionProperties.LastEnqueuedSequenceNumber }"); Debug.WriteLine($"\tThe last offset is: { partitionProperties.LastEnqueuedOffset }"); Debug.WriteLine($"\tThe last enqueued time is: { partitionProperties.LastEnqueuedTime }, in UTC."); } finally { await consumer.CloseAsync(); } #endregion }
public async Task ReadPartitionFromSequence() { await using var scope = await EventHubScope.CreateAsync(1); #region Snippet:EventHubs_Sample05_ReadPartitionFromSequence #if SNIPPET var connectionString = "<< CONNECTION STRING FOR THE EVENT HUBS NAMESPACE >>"; var eventHubName = "<< NAME OF THE EVENT HUB >>"; #else var connectionString = EventHubsTestEnvironment.Instance.EventHubsConnectionString; var eventHubName = scope.EventHubName; #endif var consumerGroup = EventHubConsumerClient.DefaultConsumerGroupName; var consumer = new EventHubConsumerClient( consumerGroup, connectionString, eventHubName); try { using CancellationTokenSource cancellationSource = new CancellationTokenSource(); cancellationSource.CancelAfter(TimeSpan.FromSeconds(30)); string firstPartition = (await consumer.GetPartitionIdsAsync(cancellationSource.Token)).First(); PartitionProperties properties = await consumer.GetPartitionPropertiesAsync(firstPartition, cancellationSource.Token); EventPosition startingPosition = EventPosition.FromSequenceNumber(properties.LastEnqueuedSequenceNumber); await foreach (PartitionEvent partitionEvent in consumer.ReadEventsFromPartitionAsync( firstPartition, startingPosition, cancellationSource.Token)) { string readFromPartition = partitionEvent.Partition.PartitionId; byte[] eventBodyBytes = partitionEvent.Data.EventBody.ToArray(); Debug.WriteLine($"Read event of length { eventBodyBytes.Length } from { readFromPartition }"); } } catch (TaskCanceledException) { // This is expected if the cancellation token is // signaled. } finally { await consumer.CloseAsync(); } #endregion }
private static async Task GetPartitionInfo() { await using var consumerClient = new EventHubConsumerClient(ConsumerGroup, ConnectionString, EventHubName); var partitionIds = await consumerClient.GetPartitionIdsAsync(); foreach (var id in partitionIds) { var partitionInfo = await consumerClient.GetPartitionPropertiesAsync(id); Console.WriteLine("***** NEW PARTITION INFO ******"); Console.WriteLine($"Partition id: {partitionInfo.Id}{Environment.NewLine}" + $"Empty? {partitionInfo.IsEmpty}{Environment.NewLine}" + $"Last Sequence: {partitionInfo.LastEnqueuedSequenceNumber}{Environment.NewLine}" + $"First Sequence: {partitionInfo.BeginningSequenceNumber}{Environment.NewLine}"); } }
private static async Task ReadFromPartition(string partitionNumber) { var cancellationTokenSource = new CancellationTokenSource(); cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(120)); await using var consumerClient = new EventHubConsumerClient(ConsumerGroup, ConnectionString, EventHubName); try { var props = await consumerClient.GetPartitionPropertiesAsync(partitionNumber); var startingPosition = EventPosition.FromSequenceNumber( //props.LastEnqueuedSequenceNumber props.BeginningSequenceNumber); await foreach (PartitionEvent partitionEvent in consumerClient.ReadEventsFromPartitionAsync(partitionNumber, startingPosition, cancellationTokenSource.Token)) { Console.WriteLine("***** NEW COFFEE *****"); var partitionId = partitionEvent.Partition.PartitionId; var sequenceNumber = partitionEvent.Data.SequenceNumber; var key = partitionEvent.Data.PartitionKey; Console.WriteLine($"Partition Id: {partitionId}{Environment.NewLine}" + $"SenquenceNumber: {sequenceNumber}{Environment.NewLine}" + $"Partition key: {key}"); var coffee = JsonSerializer.Deserialize <CoffeeData>(partitionEvent.Data.EventBody.ToArray()); Console.WriteLine($"Temperature: {coffee.WaterTemperature}, time: {coffee.BeadingTime}, type: {coffee.CoffeeType}"); } } catch (Exception ex) { Console.WriteLine(ex); } finally { await consumerClient.CloseAsync(); } }
static async Task <int> Main(string[] args) { var app = new CommandLineApplication(); app.FullName = "Event Hubs Consumer"; app.Description = "Event Hubs Consumer Sample"; app.HelpOption("-h|-?|--help"); var hubName = String.Empty; var connectionString = app.Option("-cs", "Specify ConnectionString", CommandOptionType.SingleValue, true); var group = app.Option("-cg", "Specify Consumer Group", CommandOptionType.SingleValue); var hub = app.Option("-hub", "Specify Event Hub", CommandOptionType.SingleValue); var allEvents = app.Option("-all", "Read all events", CommandOptionType.NoValue); app.Execute(args); if (!connectionString.HasValue() || string.IsNullOrEmpty(connectionString.Value())) { ShowHelp(); return(0); } var csValue = connectionString.Value().Replace("\"", "").Trim(); var csValueItems = csValue.Split(";"); foreach (var csValueItem in csValueItems) { var valuePair = csValueItem.Split("="); if (valuePair[0].ToLower() == "entitypath") { hubName = valuePair[1]; break; } } if (hubName == String.Empty) { if (!hub.HasValue() || string.IsNullOrEmpty(hub.Value())) { ShowHelp(); return(0); } else { hubName = hub.Value().Replace("\"", "").Trim(); } } // // https://docs.microsoft.com/en-us/dotnet/api/azure.messaging.eventhubs.consumer.eventhubconsumerclient?view=azure-dotnet // Select Consumer Group // string consumerGroup; if (group.HasValue() && !string.IsNullOrEmpty(group.Value())) { consumerGroup = group.Value().Replace("\"", "").Trim(); } else { consumerGroup = EventHubConsumerClient.DefaultConsumerGroupName; } Console.WriteLine("Connection String : {0}....", connectionString.Value().Replace("\"", "").Trim().Substring(0, 50)); Console.WriteLine($"Event Hub : {hubName}"); Console.WriteLine($"Consumer Group : {consumerGroup}"); Console.WriteLine($"Read all events : {allEvents.HasValue()}"); Console.WriteLine($"Timeout : {readTimetoutSeconds} seconds"); EventHubConsumerClient consumer = new EventHubConsumerClient(consumerGroup, connectionString.Value().Replace("\"", "").Trim(), hubName); var part = await consumer.GetPartitionIdsAsync(); var part_prop = await consumer.GetPartitionPropertiesAsync(part[0]); var hub_prop = await consumer.GetEventHubPropertiesAsync(); using CancellationTokenSource cancellationSource = new CancellationTokenSource(); cancellationSource.CancelAfter(TimeSpan.FromSeconds(readTimetoutSeconds)); // // https://docs.microsoft.com/en-us/dotnet/api/azure.messaging.eventhubs.consumer.eventhubconsumerclient.readeventsasync?view=azure-dotnet // // Timeout 10 Min // ReadEventOptions readOptions = new ReadEventOptions { MaximumWaitTime = TimeSpan.FromSeconds(600) }; try { Console.WriteLine($"Read Start : {DateTime.Now.ToString()}"); Console.WriteLine("Waiting for events. CTRL+C to exit"); // // If this is IoT Hub Eventhub Compatible Endpoint, device id is in ev.Data.SystemProperties["iothub-connection-device-id"] // await foreach (PartitionEvent ev in consumer.ReadEventsAsync(startReadingAtEarliestEvent: allEvents.HasValue(), readOptions, cancellationSource.Token)) { Console.WriteLine("Enqueue at {0:yyyy/MM/dd H:mm:ss:fff} | Seq # {1:D4} | Partition {2} | Offset : {3:D6} | {4}", ev.Data.EnqueuedTime, ev.Data.SequenceNumber, ev.Partition.PartitionId, ev.Data.Offset, Encoding.UTF8.GetString(ev.Data.Body.ToArray()) ); } } catch (Exception ex) { Console.WriteLine($"Exception : {ex.Message}"); } Console.WriteLine($"Read Exit : {DateTime.Now.ToString()}"); return(1); }
public Task <PartitionProperties> GetPartitionPropertiesAsync(string partitionId) => _client.GetPartitionPropertiesAsync(partitionId);