/// <summary> /// Create a reader. /// </summary> public IReader CreateReader(ReaderOptions options) { ThrowIfDisposed(); var correlationId = Guid.NewGuid(); var executor = new Executor(correlationId, _processManager, _exceptionHandler); var subscribe = new CommandSubscribe { ConsumerName = options.ReaderName, Durable = false, ReadCompacted = options.ReadCompacted, StartMessageId = options.StartMessageId.ToMessageIdData(), Subscription = $"Reader-{Guid.NewGuid():N}", Topic = options.Topic }; var messagePrefetchCount = options.MessagePrefetchCount; var batchHandler = new BatchHandler(false); var decompressorFactories = CompressionFactories.DecompressorFactories(); var factory = new ConsumerChannelFactory(correlationId, _processManager, _connectionPool, executor, subscribe, messagePrefetchCount, batchHandler, decompressorFactories); var stateManager = new StateManager <ReaderState>(ReaderState.Disconnected, ReaderState.Closed, ReaderState.ReachedEndOfTopic, ReaderState.Faulted); var reader = new Reader(correlationId, ServiceUrl, options.Topic, _processManager, new NotReadyChannel(), executor, stateManager); if (options.StateChangedHandler is not null) { _ = StateMonitor.MonitorReader(reader, options.StateChangedHandler); } var process = new ReaderProcess(correlationId, stateManager, factory, reader); _processManager.Add(process); process.Start(); return(reader); }
/// <summary> /// Create a consumer. /// </summary> public IConsumer CreateConsumer(ConsumerOptions options) { ThrowIfDisposed(); var correlationId = Guid.NewGuid(); var executor = new Executor(correlationId, _processManager, _exceptionHandler); var subscribe = new CommandSubscribe { ConsumerName = options.ConsumerName, InitialPosition = (CommandSubscribe.InitialPositionType)options.InitialPosition, PriorityLevel = options.PriorityLevel, ReadCompacted = options.ReadCompacted, Subscription = options.SubscriptionName, Topic = options.Topic, Type = (CommandSubscribe.SubType)options.SubscriptionType }; var messagePrefetchCount = options.MessagePrefetchCount; var batchHandler = new BatchHandler(true); var decompressorFactories = CompressionFactories.DecompressorFactories(); var factory = new ConsumerChannelFactory(correlationId, _processManager, _connectionPool, executor, subscribe, messagePrefetchCount, batchHandler, decompressorFactories); var stateManager = new StateManager <ConsumerState>(ConsumerState.Disconnected, ConsumerState.Closed, ConsumerState.ReachedEndOfTopic, ConsumerState.Faulted); var consumer = new Consumer(correlationId, ServiceUrl, options.SubscriptionName, options.Topic, _processManager, new NotReadyChannel(), executor, stateManager); if (options.StateChangedHandler is not null) { _ = StateMonitor.MonitorConsumer(consumer, options.StateChangedHandler); } var process = new ConsumerProcess(correlationId, stateManager, factory, consumer, options.SubscriptionType == SubscriptionType.Failover); _processManager.Add(process); process.Start(); return(consumer); }
public IConsumer CreateConsumer(ConsumerOptions options) { ThrowIfDisposed(); var correlationId = Guid.NewGuid(); var executor = new Executor(correlationId, _processManager, _exceptionHandler); var factory = new ConsumerChannelFactory(correlationId, _processManager, _connectionPool, executor, options); var stateManager = new StateManager <ConsumerState>(ConsumerState.Disconnected, ConsumerState.Closed, ConsumerState.ReachedEndOfTopic, ConsumerState.Faulted); var consumer = new Consumer(correlationId, _processManager, new NotReadyChannel(), new AsyncLockExecutor(executor), stateManager); var process = new ConsumerProcess(correlationId, stateManager, factory, consumer, options.SubscriptionType == SubscriptionType.Failover); _processManager.Add(process); process.Start(); return(consumer); }
public void GetChannelShouldReturnAnyIChannel() { // Arrange var consumerChannelFactory = new ConsumerChannelFactory(_connectionWrapper.Object); var channel = new Mock <IModel>(); _connection.Setup(x => x.CreateModel()).Returns(channel.Object); // Act var resultChannel = consumerChannelFactory.Channel; // Assert Assert.True(resultChannel == channel.Object); }
public void GetChannelShouldReturnAnyIChannel() { // Arrange var consumerChannelFactory = new ConsumerChannelFactory(_connectionWrapper.Object, _logger.Object, _channelRecovery.Object); var channel = new Mock <IModel>(); channel.Setup(x => x.IsOpen).Returns(true); _connection.Setup(x => x.CreateModel()).Returns(channel.Object); // Act // Assert consumerChannelFactory.Channel(chn => { Assert.True(chn == channel.Object); }); }
public void DisposeShouldHitChannelDispose() { // Arrange var consumerChannelFactory = new ConsumerChannelFactory(_connectionWrapper.Object); var channel = new Mock <IModel>(); _connection.Setup(x => x.CreateModel()).Returns(channel.Object); // Act var channel1 = consumerChannelFactory.Channel; var channel2 = consumerChannelFactory.Channel; consumerChannelFactory.Dispose(); // Assert channel.Verify(x => x.Close(), Times.Exactly(2)); }
public void DisposeShouldHitChannelDispose() { // Arrange var consumerChannelFactory = new ConsumerChannelFactory(_connectionWrapper.Object, _logger.Object, _channelRecovery.Object); var channel = new Mock <IModel>(); channel.Setup(x => x.IsOpen).Returns(true); _connection.Setup(x => x.CreateModel()).Returns(channel.Object); // Act consumerChannelFactory.Channel(chn => {}); consumerChannelFactory.Channel(chn => {}); consumerChannelFactory.Dispose(); // Assert channel.Verify(x => x.Close(), Times.Exactly(2)); }