public async Task Publish <T>(T data) where T : IEvent { var config = new ProducerConfig { BootstrapServers = _parameters.GetStringParameter("KAFKA_BOOTSTRAP_SERVERS"), // Debug = "all" }; // If serializers are not specified, default serializers from // `Confluent.Kafka.Serializers` will be automatically used where // available. Note: by default strings are encoded as UTF8. using (var p = new ProducerBuilder <Null, string>(config).Build()) { try { var dr = await p.ProduceAsync(GetTopicName <T>(), new Message <Null, string> { Value = JsonSerializer.Serialize(data) }); _logger.LogDebug($"Delivered '{dr.Value}' to '{dr.TopicPartitionOffset}'"); } catch (ProduceException <Null, string> e) { _logger.LogError($"Delivery failed: {e.Error.Reason}"); } catch (Exception e) { _logger.LogError($"Delivery failed: {e.GetFullMessage()}"); throw; } } }
public async Task Publish <T>(T data) where T : IEvent { var config = new ProducerConfig { BootstrapServers = _parameters.GetStringParameter("KAFKA_BOOTSTRAP_SERVERS"), // Debug = "all" }; var schemaRegistryConfig = new SchemaRegistryConfig { Url = _parameters.GetStringParameter("KAFKA_SCHEMA_REGISTRY_URLS") }; using (var schemaRegistry = new CachedSchemaRegistryClient(schemaRegistryConfig)) using (var p = new ProducerBuilder <Null, T>(config) .SetValueSerializer(new AvroSerializer <T>(schemaRegistry).AsSyncOverAsync()) .SetErrorHandler((_, e) => _logger.LogError($"Exception has occured when trying to publish an event : {e.Reason}")) .Build()) { try { var dr = await p.ProduceAsync(GetTopicName <T>(), new Message <Null, T> { Value = data }); _logger.LogDebug($"Delivered '{dr.Value}' to '{dr.TopicPartitionOffset}'"); } catch (ProduceException <Null, string> e) { _logger.LogError($"Delivery failed: {e.Error.Reason}"); } catch (Exception e) { _logger.LogError($"Delivery failed: {e.GetFullMessage()}"); throw; } } }