예제 #1
0
        public void Consumer_IncrementalAssign(string bootstrapServers)
        {
            LogToFile("start Consumer_Incremental_1");

            var consumerConfig = new ConsumerConfig
            {
                GroupId          = Guid.NewGuid().ToString(),
                BootstrapServers = bootstrapServers,
                EnableAutoCommit = false,
                AutoOffsetReset  = AutoOffsetReset.Error
            };

            using (var consumer = new ConsumerBuilder <byte[], byte[]>(consumerConfig).Build())
                using (var topic1 = new TemporaryTopic(bootstrapServers, 1))
                    using (var topic2 = new TemporaryTopic(bootstrapServers, 1))
                    {
                        Util.ProduceNullStringMessages(bootstrapServers, topic1.Name, 1, 1);
                        Util.ProduceNullStringMessages(bootstrapServers, topic2.Name, 1, 1);

                        consumer.IncrementalAssign(new List <TopicPartitionOffset> {
                            new TopicPartitionOffset(topic1.Name, 0, Offset.Beginning)
                        });
                        var cr1 = consumer.Consume(TimeSpan.FromSeconds(10));
                        Assert.NotNull(cr1);
                        Assert.Equal(0, cr1.Offset);
                        Assert.Equal(topic1.Name, cr1.Topic);
                        Assert.Equal(0, (int)cr1.Partition);
                        consumer.Commit(cr1);

                        consumer.IncrementalAssign(new List <TopicPartitionOffset> {
                            new TopicPartitionOffset(topic2.Name, 0, Offset.Beginning)
                        });
                        var cr2 = consumer.Consume(TimeSpan.FromSeconds(10));
                        Assert.NotNull(cr2);
                        Assert.Equal(0, cr2.Offset);
                        Assert.Equal(topic2.Name, cr2.Topic);
                        Assert.Equal(0, (int)cr2.Partition);

                        consumer.IncrementalUnassign(new List <TopicPartition> {
                            new TopicPartition(topic1.Name, 0)
                        });
                        Util.ProduceNullStringMessages(bootstrapServers, topic1.Name, 2, 1);
                        var cr3 = consumer.Consume(TimeSpan.FromSeconds(2));
                        Assert.Null(cr3);

                        Util.ProduceNullStringMessages(bootstrapServers, topic2.Name, 3, 1);
                        var cr4 = consumer.Consume(TimeSpan.FromSeconds(10));
                        Assert.NotNull(cr4);
                        Assert.Equal(1, cr4.Offset);
                        Assert.Equal(topic2.Name, cr4.Topic);
                        Assert.Equal(0, (int)cr4.Partition);
                        Assert.Equal(3, cr4.Message.Value.Length);

                        consumer.IncrementalAssign(new List <TopicPartition> {
                            new TopicPartition(topic1.Name, 0)
                        });
                        var cr5 = consumer.Consume(TimeSpan.FromSeconds(10));
                        Assert.NotNull(cr5);
                        Assert.Equal(1, cr5.Offset);
                        Assert.Equal(topic1.Name, cr5.Topic);
                        Assert.Equal(0, (int)cr5.Partition);

                        var cr6 = consumer.Consume(TimeSpan.FromSeconds(1));
                        Assert.Null(cr6);

                        consumer.IncrementalUnassign(new List <TopicPartition> {
                            new TopicPartition(topic1.Name, 0)
                        });
                        consumer.Unassign();
                    }

            Assert.Equal(0, Library.HandleCount);
            LogToFile("end   Consumer_IncrementalAssign");
        }