Пример #1
0
        public static void ProduceConsumeNestedProtobuf(string bootstrapServers, string schemaRegistryServers)
        {
            var producerConfig = new ProducerConfig {
                BootstrapServers = bootstrapServers
            };
            var schemaRegistryConfig = new SchemaRegistryConfig {
                Url = schemaRegistryServers
            };

            using (var topic = new TemporaryTopic(bootstrapServers, 1))
                using (var schemaRegistry = new CachedSchemaRegistryClient(schemaRegistryConfig))
                    using (var producer =
                               new ProducerBuilder <string, NestedOuter.Types.NestedMid2.Types.NestedLower>(producerConfig)
                               .SetValueSerializer(new ProtobufSerializer <NestedOuter.Types.NestedMid2.Types.NestedLower>(schemaRegistry))
                               .Build())
                    {
                        var u = new NestedOuter.Types.NestedMid2.Types.NestedLower();
                        u.Field2 = "field_2_value";
                        producer.ProduceAsync(topic.Name, new Message <string, NestedOuter.Types.NestedMid2.Types.NestedLower> {
                            Key = "test1", Value = u
                        }).Wait();

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

                        // Test the protobuf deserializer can read this message
                        using (var consumer =
                                   new ConsumerBuilder <string, NestedOuter.Types.NestedMid2.Types.NestedLower>(consumerConfig)
                                   .SetValueDeserializer(new ProtobufDeserializer <NestedOuter.Types.NestedMid2.Types.NestedLower>()
                                                         .AsSyncOverAsync())
                                   .Build())
                        {
                            consumer.Subscribe(topic.Name);
                            var cr = consumer.Consume();
                            Assert.Equal(u.Field2, cr.Message.Value.Field2);
                        }

                        // Check the pre-data bytes are as expected.
                        using (var consumer = new ConsumerBuilder <string, byte[]>(consumerConfig).Build())
                        {
                            consumer.Subscribe(topic.Name);
                            var cr = consumer.Consume();
                            // magic byte + schema id + expected array index length + at least one data byte.
                            Assert.True(cr.Message.Value.Length > 1 + 4 + 4 + 1);
                            // magic byte
                            Assert.Equal(0, cr.Message.Value[0]);
                            // index array.
                            Assert.Equal(3, cr.Message.Value[5]);
                            Assert.Equal(2, cr.Message.Value[6]);
                            Assert.Equal(1, cr.Message.Value[7]);
                            Assert.Equal(0, cr.Message.Value[8]);
                        }
                    }
        }
Пример #2
0
        public static void ProduceConsumeNestedProtobuf(string bootstrapServers, string schemaRegistryServers)
        {
            var producerConfig = new ProducerConfig {
                BootstrapServers = bootstrapServers
            };
            var schemaRegistryConfig = new SchemaRegistryConfig {
                Url = schemaRegistryServers
            };

            using (var topic = new TemporaryTopic(bootstrapServers, 1))
                using (var schemaRegistry = new CachedSchemaRegistryClient(schemaRegistryConfig))
                    using (var producer =
                               new ProducerBuilder <string, NestedOuter.Types.NestedMid2.Types.NestedLower>(producerConfig)
                               .SetValueSerializer(new ProtobufSerializer <NestedOuter.Types.NestedMid2.Types.NestedLower>(schemaRegistry))
                               .Build())
                    {
                        var u = new NestedOuter.Types.NestedMid2.Types.NestedLower();
                        u.Field2 = "field_2_value";
                        producer.ProduceAsync(topic.Name, new Message <string, NestedOuter.Types.NestedMid2.Types.NestedLower> {
                            Key = "test1", Value = u
                        }).Wait();

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

                        // Test the protobuf deserializer can read this message
                        using (var consumer =
                                   new ConsumerBuilder <string, NestedOuter.Types.NestedMid2.Types.NestedLower>(consumerConfig)
                                   .SetValueDeserializer(new ProtobufDeserializer <NestedOuter.Types.NestedMid2.Types.NestedLower>()
                                                         .AsSyncOverAsync())
                                   .Build())
                        {
                            consumer.Subscribe(topic.Name);
                            var cr = consumer.Consume();
                            Assert.Equal(u.Field2, cr.Message.Value.Field2);
                        }
                    }
        }