示例#1
0
        public void Build_AllCalls_ReturnPassedValues()
        {
            // Arrange
            var                   clusterConfiguration = this.fixture.Create <ClusterConfiguration>();
            var                   topic1               = this.fixture.Create <string>();
            var                   topic2               = this.fixture.Create <string>();
            var                   name                 = this.fixture.Create <string>();
            const int             bufferSize           = 100;
            const int             workers              = 10;
            const AutoOffsetReset offsetReset          = AutoOffsetReset.Earliest;
            var                   groupId              = this.fixture.Create <string>();
            const int             autoCommitInterval   = 10000;
            const int             maxPollIntervalMs    = 500000;
            ConsumerCustomFactory customFactory        = (producer, resolver) => producer;
            Action <string>       statisticsHandler    = s => { };
            const int             statisticsIntervalMs = 100;
            var                   consumerConfig       = new ConsumerConfig();

            this.target
            .Topics(topic1)
            .Topic(topic2)
            .WithName(name)
            .WithBufferSize(bufferSize)
            .WithWorkersCount(workers)
            .WithGroupId(groupId)
            .WithAutoOffsetReset(offsetReset)
            .WithManualStoreOffsets()
            .WithAutoCommitIntervalMs(autoCommitInterval)
            .WithMaxPollIntervalMs(maxPollIntervalMs)
            .WithConsumerConfig(consumerConfig)
            .WithCustomFactory(customFactory)
            .WithStatisticsIntervalMs(statisticsIntervalMs)
            .WithStatisticsHandler(statisticsHandler)
            .AddMiddlewares(m => m.Add <IMessageMiddleware>());

            // Act
            var configuration = this.target.Build(clusterConfiguration);

            // Assert
            configuration.Topics.Should().BeEquivalentTo(topic1, topic2);
            configuration.ConsumerName.Should().Be(name);
            configuration.BufferSize.Should().Be(bufferSize);
            configuration.WorkerCount.Should().Be(workers);
            configuration.GroupId.Should().Be(groupId);
            configuration.GetKafkaConfig().AutoOffsetReset.Should().Be(offsetReset);
            configuration.AutoStoreOffsets.Should().Be(false);
            configuration.GetKafkaConfig().EnableAutoOffsetStore.Should().Be(false);
            configuration.GetKafkaConfig().EnableAutoCommit.Should().Be(false);
            configuration.AutoCommitInterval.Should().Be(TimeSpan.FromMilliseconds(autoCommitInterval));
            configuration.GetKafkaConfig().MaxPollIntervalMs.Should().Be(maxPollIntervalMs);
            configuration.GetKafkaConfig().StatisticsIntervalMs.Should().Be(statisticsIntervalMs);
            configuration.StatisticsHandlers.Should().HaveElementAt(0, statisticsHandler);
            configuration.GetKafkaConfig().Should().BeSameAs(consumerConfig);
            configuration.MiddlewareConfiguration.Factories.Should().HaveCount(1);
        }
示例#2
0
        public ConsumerConfiguration(
            ConsumerConfig consumerConfig,
            IEnumerable <string> topics,
            string consumerName,
            ClusterConfiguration clusterConfiguration,
            bool managementDisabled,
            int workersCount,
            int bufferSize,
            Factory <IDistributionStrategy> distributionStrategyFactory,
            MiddlewareConfiguration middlewareConfiguration,
            bool autoStoreOffsets,
            TimeSpan autoCommitInterval,
            IReadOnlyList <Action <string> > statisticsHandlers,
            IReadOnlyList <Action <IDependencyResolver, List <TopicPartition> > > partitionsAssignedHandlers,
            IReadOnlyList <Action <IDependencyResolver, List <TopicPartitionOffset> > > partitionsRevokedHandlers,
            ConsumerCustomFactory customFactory)
        {
            this.consumerConfig = consumerConfig ?? throw new ArgumentNullException(nameof(consumerConfig));

            if (string.IsNullOrEmpty(this.consumerConfig.GroupId))
            {
                throw new ArgumentNullException(nameof(consumerConfig.GroupId));
            }

            this.DistributionStrategyFactory =
                distributionStrategyFactory ?? throw new ArgumentNullException(nameof(distributionStrategyFactory));
            this.MiddlewareConfiguration = middlewareConfiguration ?? throw new ArgumentNullException(nameof(middlewareConfiguration));
            this.AutoStoreOffsets        = autoStoreOffsets;
            this.AutoCommitInterval      = autoCommitInterval;
            this.Topics                     = topics ?? throw new ArgumentNullException(nameof(topics));
            this.ConsumerName               = consumerName ?? Guid.NewGuid().ToString();
            this.ClusterConfiguration       = clusterConfiguration;
            this.ManagementDisabled         = managementDisabled;
            this.WorkersCount               = workersCount;
            this.StatisticsHandlers         = statisticsHandlers;
            this.PartitionsAssignedHandlers = partitionsAssignedHandlers;
            this.PartitionsRevokedHandlers  = partitionsRevokedHandlers;
            this.CustomFactory              = customFactory;

            this.BufferSize = bufferSize > 0 ?
                              bufferSize :
                              throw new ArgumentOutOfRangeException(
                                        nameof(bufferSize),
                                        bufferSize,
                                        "The value must be greater than 0");
        }
示例#3
0
 public IConsumerConfigurationBuilder WithCustomFactory(ConsumerCustomFactory customFactory)
 {
     this.customFactory = customFactory;
     return(this);
 }
示例#4
0
 /// <summary>
 /// Register a custom consumer factory to be internally used by the framework
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="decoratorFactory">The factory method</param>
 /// <returns></returns>
 public static IConsumerConfigurationBuilder WithCustomFactory(
     this IConsumerConfigurationBuilder builder,
     ConsumerCustomFactory decoratorFactory)
 {
     return(((ConsumerConfigurationBuilder)builder).WithCustomFactory(decoratorFactory));
 }