コード例 #1
0
        public async Task TestSimpleConsumerWorksOk()
        {
            var keySerializer      = new NullSerializer <object>();
            var valueSerializer    = new StringSerializer();
            var messagePartitioner = new LoadBalancedPartitioner <object>();

            using (var temporaryTopic = testCluster.CreateTemporaryTopic())
                using (var brokers = new KafkaBrokers(testCluster.CreateBrokerUris()))
                {
                    var topic    = temporaryTopic.Name;
                    var producer = KafkaProducer.Create(brokers, keySerializer, valueSerializer, messagePartitioner);
                    var consumer = KafkaConsumer.Create(defaultConsumerGroup, brokers, keySerializer, valueSerializer,
                                                        new TopicSelector {
                        Partition = 0, Topic = topic
                    });

                    await producer.SendAsync(KeyedMessage.Create(topic, "Message"), CancellationToken.None);

                    var responses = await consumer.ReceiveAsync(CancellationToken.None);

                    Assert.That(responses, Is.Not.Null);
                    Assert.That(responses, Has.Count.EqualTo(1));

                    var first = responses.First();
                    Assert.That(first.Key, Is.Null);
                    Assert.That(first.Offset, Is.EqualTo(0));
                    Assert.That(first.Partition, Is.EqualTo(0));
                    Assert.That(first.Topic, Is.EqualTo(topic));
                    Assert.That(first.Value, Is.EqualTo("Message"));
                }
        }
コード例 #2
0
        public async Task TestProducingWorksOk()
        {
            using (var temporaryTopic = testCluster.CreateTemporaryTopic())
                using (var connection = await KafkaConnectionFactory.CreateSimpleKafkaConnectionAsync(testCluster.CreateBrokerUris()[0]))
                {
                    var request = new ProduceRequest
                    {
                        Acks      = 1,
                        TimeoutMS = 10000,
                        Payload   = new List <Payload>
                        {
                            new Payload
                            {
                                Topic     = temporaryTopic.Name,
                                Partition = 0,
                                Codec     = MessageCodec.CodecNone,
                                Messages  = new List <Message>
                                {
                                    new Message(Guid.NewGuid().ToString())
                                }
                            }
                        }
                    };

                    var response = await connection.SendRequestAsync(request, CancellationToken.None);

                    Assert.That(response, Has.Count.EqualTo(1));
                    var first = response.First();
                    Assert.That(first.Error, Is.EqualTo(ErrorResponseCode.NoError));
                }
        }
コード例 #3
0
        public async Task VerifyABrokerStoppingAndRestartingCanBeHandledByTheConsumer()
        {
            using (var cluster = new KafkaTestCluster("server.home", 1))
            {
                var topic = "test";
                cluster.CreateTopic(topic);
                using (var brokers = new KafkaBrokers(cluster.CreateBrokerUris()))
                {
                    var producer = KafkaProducer.Create(brokers, new StringSerializer());
                    await producer.SendAsync(KeyedMessage.Create(topic, "Test"), CancellationToken.None);

                    await Task.Delay(1000);

                    cluster.StopKafkaBroker(0);
                    cluster.RestartKafkaBroker(0);

                    var consumer = KafkaConsumer.Create(topic, brokers, new StringSerializer(),
                                                        new TopicSelector {
                        Topic = topic, Partition = 0, Offset = 0
                    });
                    var result = await consumer.ReceiveAsync(CancellationToken.None);

                    Assert.That(result, Has.Count.EqualTo(1));
                    var first = result[0];

                    Assert.That(first.Value, Is.EqualTo("Test"));
                    Assert.That(first.Offset, Is.EqualTo(0));
                }
                cluster.DeleteTopic(topic);
            }
        }
コード例 #4
0
        public async Task ProduceToTwoPartitions()
        {
            var keySerializer      = new Int32Serializer();
            var valueSerializer    = new StringSerializer();
            var messagePartitioner = new Int32Partitioner();

            using (var temporaryTopic = testCluster.CreateTemporaryTopic(partitions: 2))
                using (var brokers = new KafkaBrokers(testCluster.CreateBrokerUris()))
                {
                    var topic     = temporaryTopic.Name;
                    var producer  = KafkaProducer.Create(brokers, keySerializer, valueSerializer, messagePartitioner);
                    var consumers = new[] {
                        KafkaConsumer.Create(defaultConsumerGroup, brokers, keySerializer, valueSerializer,
                                             new TopicSelector {
                            Partition = 0, Topic = topic
                        }),
                        KafkaConsumer.Create(defaultConsumerGroup, brokers, keySerializer, valueSerializer,
                                             new TopicSelector {
                            Partition = 1, Topic = topic
                        })
                    };


                    await producer.SendAsync(new[] {
                        KeyedMessage.Create(topic, 0, "Message to partition 0"),
                        KeyedMessage.Create(topic, 1, "Message to partition 1")
                    }, CancellationToken.None);

                    for (var i = 0; i < consumers.Length; i++)
                    {
                        var responses = await consumers[i].ReceiveAsync(CancellationToken.None);
                        Assert.That(responses, Is.Not.Null);
                        Assert.That(responses, Has.Count.EqualTo(1));

                        var first = responses.First();
                        Assert.That(first.Offset, Is.EqualTo(0));
                        Assert.That(first.Partition, Is.EqualTo(i));
                        Assert.That(first.Key, Is.EqualTo(i));
                        Assert.That(first.Topic, Is.EqualTo(topic));
                        Assert.That(first.Value, Is.EqualTo("Message to partition " + i));
                    }
                }
        }