public static void ProduceConsumeSchemaManyMessagesProtobuf(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, Msg230>(producerConfig) .SetValueSerializer(new ProtobufSerializer <Msg230>(schemaRegistry)) .Build()) { var u = new Msg230(); u.Value = 41; producer.ProduceAsync(topic.Name, new Message <string, Msg230> { 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, UInt32Value>(consumerConfig) .SetValueDeserializer(new ProtobufDeserializer <UInt32Value>().AsSyncOverAsync()) .Build()) { consumer.Subscribe(topic.Name); var cr = consumer.Consume(); Assert.Equal(u.Value, cr.Message.Value.Value); } // 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 + 1 + 2 + 1); // magic byte Assert.Equal(0, cr.Message.Value[0]); // index array length Assert.Equal(1, cr.Message.Value[5]); // there are 231 messages in the schema. message 230 has index 230. varint is 2 bytes: // in binary: 11100110. // -> &7f |80 -> 11100110 = 230 Assert.Equal(230, cr.Message.Value[6]); // >>7 -> 00000001 Assert.Equal(1, cr.Message.Value[7]); } } }
public static void ProduceConsumeSchemaManyMessagesProtobuf(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, Msg230>(producerConfig) .SetValueSerializer(new ProtobufSerializer <Msg230>(schemaRegistry)) .Build()) { var u = new Msg230(); u.Value = 41; producer.ProduceAsync(topic.Name, new Message <string, Msg230> { 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, UInt32Value>(consumerConfig) .SetValueDeserializer(new ProtobufDeserializer <UInt32Value>().AsSyncOverAsync()) .Build()) { consumer.Subscribe(topic.Name); var cr = consumer.Consume(); Assert.Equal(u.Value, cr.Message.Value.Value); } } }