public void CloneProducesACopy() { var options = new PartitionReceiverOptions { ConnectionOptions = new EventHubConnectionOptions { TransportType = EventHubsTransportType.AmqpWebSockets }, RetryOptions = new EventHubsRetryOptions { Mode = EventHubsRetryMode.Fixed }, DefaultMaximumReceiveWaitTime = TimeSpan.FromMilliseconds(9994), OwnerLevel = 99, PrefetchCount = 65, TrackLastEnqueuedEventProperties = false }; PartitionReceiverOptions clone = options.Clone(); Assert.That(clone, Is.Not.Null, "The clone should not be null."); Assert.That(clone, Is.Not.SameAs(options), "The options should be a copy, not the same instance."); Assert.That(clone.ConnectionOptions.TransportType, Is.EqualTo(options.ConnectionOptions.TransportType), "The connection options of the clone should copy properties."); Assert.That(clone.ConnectionOptions, Is.Not.SameAs(options.ConnectionOptions), "The connection options of the clone should be a copy, not the same instance."); Assert.That(clone.RetryOptions.IsEquivalentTo(options.RetryOptions), Is.True, "The retry options of the clone should be considered equal."); Assert.That(clone.RetryOptions, Is.Not.SameAs(options.RetryOptions), "The retry options of the clone should be a copy, not the same instance."); Assert.That(clone.DefaultMaximumReceiveWaitTime, Is.EqualTo(options.DefaultMaximumReceiveWaitTime), "The maximum wait time should match."); Assert.That(clone.OwnerLevel, Is.EqualTo(options.OwnerLevel), "The owner level of the clone should match."); Assert.That(clone.PrefetchCount, Is.EqualTo(options.PrefetchCount), "The prefetch count should match."); Assert.That(clone.TrackLastEnqueuedEventProperties, Is.EqualTo(options.TrackLastEnqueuedEventProperties), "Tracking of last enqueued events should match."); }
public EventHubReceiverProxy(EventHubPartitionSettings partitionSettings, string offset, ILogger logger) { var receiverOptions = new PartitionReceiverOptions(); if (partitionSettings.ReceiverOptions.PrefetchCount != null) { receiverOptions.PrefetchCount = partitionSettings.ReceiverOptions.PrefetchCount.Value; } receiverOptions.ConnectionOptions = new EventHubConnectionOptions { TransportType = partitionSettings.Hub.EventHubsTransportType }; var options = partitionSettings.Hub; this.client = options.TokenCredential != null ? new PartitionReceiver(options.ConsumerGroup, partitionSettings.Partition, GetEventPosition(), options.FullyQualifiedNamespace, options.Path, options.TokenCredential, receiverOptions) : new PartitionReceiver(options.ConsumerGroup, partitionSettings.Partition, GetEventPosition(), options.ConnectionString, options.Path, receiverOptions); EventPosition GetEventPosition() { EventPosition eventPosition; // If we have a starting offset, read from offset if (offset != EventHubConstants.StartOfStream) { if (!long.TryParse(offset, out var longOffset)) { throw new InvalidOperationException("Offset must be a number."); } logger.LogInformation("Starting to read from EventHub partition {0}-{1} at offset {2}", options.Path, partitionSettings.Partition, offset); eventPosition = EventPosition.FromOffset(longOffset, true); } // else, if configured to start from now, start reading from most recent data else if (partitionSettings.ReceiverOptions.StartFromNow) { eventPosition = EventPosition.Latest; logger.LogInformation("Starting to read latest messages from EventHub partition {0}-{1}.", options.Path, partitionSettings.Partition); } else // else, start reading from begining of the partition { eventPosition = EventPosition.Earliest; logger.LogInformation("Starting to read messages from begining of EventHub partition {0}-{1}.", options.Path, partitionSettings.Partition); } return(eventPosition); } }
public async Task PartitionReceiverCanRetrievePartitionProperties(EventHubsTransportType transportType) { var partitionCount = 1; await using (EventHubScope scope = await EventHubScope.CreateAsync(partitionCount)) { var cancellationSource = new CancellationTokenSource(TimeSpan.FromSeconds(20)); var connectionString = TestEnvironment.BuildConnectionStringForEventHub(scope.EventHubName); var receiverOptions = new PartitionReceiverOptions { ConnectionOptions = new EventHubConnectionOptions { TransportType = transportType } }; var partitionId = default(string); await using (var producer = new EventHubProducerClient(connectionString)) { partitionId = (await producer.GetPartitionIdsAsync(cancellationSource.Token)).First(); } await using (var receiver = new PartitionReceiver(EventHubConsumerClient.DefaultConsumerGroupName, partitionId, EventPosition.Earliest, connectionString, receiverOptions)) { var partitionProperties = await receiver.GetPartitionPropertiesAsync(cancellationSource.Token); Assert.That(cancellationSource.IsCancellationRequested, Is.False, "The cancellation token should not have been signaled."); Assert.That(partitionProperties, Is.Not.Null, "A set of partition properties should have been returned."); Assert.That(partitionProperties.Id, Is.EqualTo(partitionId), "The partition identifier should match."); Assert.That(partitionProperties.EventHubName, Is.EqualTo(scope.EventHubName).Using((IEqualityComparer <string>)StringComparer.InvariantCultureIgnoreCase), "The Event Hub path should match."); Assert.That(partitionProperties.BeginningSequenceNumber, Is.Not.EqualTo(default(long)), "The beginning sequence number should have been populated."); Assert.That(partitionProperties.LastEnqueuedSequenceNumber, Is.Not.EqualTo(default(long)), "The last sequence number should have been populated."); Assert.That(partitionProperties.LastEnqueuedOffset, Is.Not.EqualTo(default(long)), "The last offset should have been populated."); } } }