Skip to content

Commit d177dc3

Browse files
a.kiselevsaneks222
authored andcommitted
wip
Signed-off-by: a.kiselev <saneks222@yandex.ru>
1 parent 989577d commit d177dc3

4 files changed

Lines changed: 49 additions & 31 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace SlimMessageBus.Host.Kafka;
2+
3+
public class KafkaClientConfig<T>
4+
where T : ClientConfig
5+
{
6+
public T ConfluentConfig { get; set; }
7+
8+
public ILogger Logger { get; set; }
9+
}
Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
namespace SlimMessageBus.Host.Kafka;
2-
3-
using ConsumerBuilder = Confluent.Kafka.ConsumerBuilder<Confluent.Kafka.Ignore, byte[]>;
4-
using ProducerBuilder = Confluent.Kafka.ProducerBuilder<byte[], byte[]>;
5-
2+
3+
using ConsumerBuilder = Confluent.Kafka.ConsumerBuilder<Confluent.Kafka.Ignore, byte[]>;
4+
using ProducerBuilder = Confluent.Kafka.ProducerBuilder<byte[], byte[]>;
5+
66
public class KafkaMessageBusSettings
77
{
88
/// <summary>
@@ -12,7 +12,7 @@ public class KafkaMessageBusSettings
1212
/// <summary>
1313
/// Factory method that creates a <see cref="ProducerBuilder"/> based on the supplied settings.
1414
/// </summary>
15-
public Func<ProducerConfig, ProducerBuilder> ProducerBuilderFactory { get; set; }
15+
public Func<KafkaClientConfig<ProducerConfig>, ProducerBuilder> ProducerBuilderFactory { get; set; }
1616
/// <summary>
1717
/// Factory method that created a <see cref="Producer"/>.
1818
/// See also: https://kafka.apache.org/documentation/#producerconfigs
@@ -21,7 +21,7 @@ public class KafkaMessageBusSettings
2121
/// <summary>
2222
/// Factory method that creates a <see cref="ConsumerBuilder"/> based on the supplied settings and consumer GroupId.
2323
/// </summary>
24-
public Func<ConsumerConfig, ConsumerBuilder> ConsumerBuilderFactory { get; set; }
24+
public Func<KafkaClientConfig<ConsumerConfig>,ConsumerBuilder> ConsumerBuilderFactory { get; set; }
2525
/// <summary>
2626
/// Factory method that creates settings based on the consumer GroupId.
2727
/// See also: https://kafka.apache.org/documentation/#newconsumerconfigs
@@ -32,30 +32,30 @@ public class KafkaMessageBusSettings
3232
/// </summary>
3333
public TimeSpan ConsumerPollRetryInterval { get; set; }
3434

35-
/// <summary>
36-
/// Serializer used to serialize Kafka message header values. If not specified the default serializer will be used (setup as part of the bus config). By default the <see cref="DefaultKafkaHeaderSerializer"/> is used.
35+
/// <summary>
36+
/// Serializer used to serialize Kafka message header values. If not specified the default serializer will be used (setup as part of the bus config). By default the <see cref="DefaultKafkaHeaderSerializer"/> is used.
3737
/// </summary>
38-
public IMessageSerializerProvider HeaderSerializer { get; set; }
39-
40-
/// <summary>
41-
/// Should the commit on partitions for the consumed messages happen when the bus is stopped (or disposed)?
42-
/// This ensures the message reprocessing is minimized in between application restarts.
43-
/// Default is true.
38+
public IMessageSerializerProvider HeaderSerializer { get; set; }
39+
40+
/// <summary>
41+
/// Should the commit on partitions for the consumed messages happen when the bus is stopped (or disposed)?
42+
/// This ensures the message reprocessing is minimized in between application restarts.
43+
/// Default is true.
4444
/// </summary>
4545
public bool EnableCommitOnBusStop { get; set; } = true;
4646

4747
public KafkaMessageBusSettings()
48-
{
48+
{
4949
ProducerConfig = (config) => { };
50-
ProducerBuilderFactory = (config) => new ProducerBuilder<byte[], byte[]>(config);
50+
ProducerBuilderFactory = (config) => new ProducerBuilder<byte[], byte[]>(config.ConfluentConfig);
5151
ConsumerConfig = (config) => { };
52-
ConsumerBuilderFactory = (config) => new ConsumerBuilder<Ignore, byte[]>(config);
53-
ConsumerPollRetryInterval = TimeSpan.FromSeconds(2);
52+
ConsumerBuilderFactory = (config) => new ConsumerBuilder<Ignore, byte[]>(config.ConfluentConfig);
53+
ConsumerPollRetryInterval = TimeSpan.FromSeconds(2);
5454
HeaderSerializer = new DefaultKafkaHeaderSerializer();
55-
}
56-
55+
}
56+
5757
public KafkaMessageBusSettings(string brokerList) : this()
58-
{
58+
{
5959
BrokerList = brokerList;
6060
}
6161
}

src/SlimMessageBus.Host.Kafka/Consumer/KafkaGroupConsumer.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,22 @@ protected override async ValueTask DisposeAsyncCore()
6464

6565
protected IConsumer CreateConsumer(string group)
6666
{
67-
var config = new ConsumerConfig
67+
var config = new KafkaClientConfig<ConsumerConfig>
6868
{
69-
GroupId = group,
70-
BootstrapServers = ProviderSettings.BrokerList
69+
ConfluentConfig = new ConsumerConfig
70+
{
71+
GroupId = group,
72+
BootstrapServers = ProviderSettings.BrokerList
73+
},
74+
Logger = Logger
7175
};
72-
ProviderSettings.ConsumerConfig(config);
76+
77+
ProviderSettings.ConsumerConfig(config.ConfluentConfig);
7378

7479
// ToDo: add support for auto commit
75-
config.EnableAutoCommit = false;
80+
config.ConfluentConfig.EnableAutoCommit = false;
7681
// Notify when we reach EoF, so that we can do a manual commit
77-
config.EnablePartitionEof = true;
82+
config.ConfluentConfig.EnablePartitionEof = true;
7883

7984
var consumer = ProviderSettings.ConsumerBuilderFactory(config)
8085
.SetStatisticsHandler((_, json) => OnStatistics(json))

src/SlimMessageBus.Host.Kafka/KafkaMessageBus.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,17 @@ public void Flush()
4545
public IProducer CreateProducerInternal()
4646
{
4747
_logger.LogTrace("Creating producer settings");
48-
var config = new ProducerConfig
48+
var config = new KafkaClientConfig<ProducerConfig>
4949
{
50-
BootstrapServers = ProviderSettings.BrokerList,
50+
ConfluentConfig = new ProducerConfig()
51+
{
52+
BootstrapServers = ProviderSettings.BrokerList
53+
},
54+
Logger = _logger
5155
};
52-
ProviderSettings.ProducerConfig(config);
56+
ProviderSettings.ProducerConfig(config.ConfluentConfig);
5357

54-
_producerDeliveryReportsEnabled = config.EnableDeliveryReports ?? true; // when not set per Confluent.KafkaNet docs, it's defaulting to true
58+
_producerDeliveryReportsEnabled = config.ConfluentConfig.EnableDeliveryReports ?? true; // when not set per Confluent.KafkaNet docs, it's defaulting to true
5559

5660
_logger.LogDebug("Producer settings: {ProducerSettings}", config);
5761
return ProviderSettings.ProducerBuilderFactory(config).Build();

0 commit comments

Comments
 (0)