示例#1
0
        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;
                }
            }
        }
示例#2
0
        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;
                    }
                }
        }