Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
            });
        }
Esempio n. 6
0
        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));
        }