public static KafkaProducerConfigurationBuilder UseKafka(this StandardConfigurer <IConsumerImplementation> configurer, IEnumerable <string> bootstrapServers) { var builder = new KafkaProducerConfigurationBuilder(); StandardConfigurer.Open(configurer) .Register(c => { var loggerFactory = c.Get <ILoggerFactory>(); var topics = c.Has <Topics>() ? c.Get <Topics>() : new Topics(); var group = c.Get <GroupId>(); var consumerDispatcher = c.Get <IConsumerDispatcher>(); var positionManager = c.Get <IPositionManager>(errorMessage: @"The Kafka consumer needs access to a positions manager, so it can figure out which offsets to pick up from when starting up."); return(new KafkaConsumerImplementation( loggerFactory: loggerFactory, address: string.Join("; ", bootstrapServers), topics: topics, group: group.Id, consumerDispatcher: consumerDispatcher, positionManager: positionManager )); }); return(builder); }
public static KafkaProducerConfigurationBuilder UseKafka(this StandardConfigurer <IProducerImplementation> configurer, IEnumerable <string> bootstrapServers) { var builder = new KafkaProducerConfigurationBuilder(); StandardConfigurer.Open(configurer) .Register(c => RegisterProducerImplementation(bootstrapServers, c, builder)); return(builder); }
public static KafkaProducerConfigurationBuilder WithCertificate(this KafkaProducerConfigurationBuilder builder, string sslCaLocation) { KafkaProducerConfigurationBuilder.AddCustomizer(builder, config => { config.SecurityProtocol = SecurityProtocol.Ssl; config.SslCaLocation = sslCaLocation; return(config); }); return(builder); }
public static KafkaProducerConfigurationBuilder UseKafka(this StandardConfigurer <IProducerImplementation> configurer, IEnumerable <string> bootstrapServers) { var builder = new KafkaProducerConfigurationBuilder(); StandardConfigurer.Open(configurer) .Register(c => { var loggerFactory = c.Get <ILoggerFactory>(); return(new KafkaProducerImplementation(loggerFactory, string.Join(";", bootstrapServers))); }); return(builder); }
/// <summary> /// Configures the Kafka client with good defaults for connecting to Confluent Cloud /// </summary> public static KafkaProducerConfigurationBuilder WithConfluentCloud(this KafkaProducerConfigurationBuilder builder, string key, string secret) { KafkaProducerConfigurationBuilder.AddCustomizer(builder, config => { config.SaslUsername = key; config.SaslPassword = secret; config.RequestTimeoutMs = 60000; config.SecurityProtocol = SecurityProtocol.SaslSsl; config.SaslMechanism = SaslMechanism.Plain; config.EnableSslCertificateVerification = false; config.SocketKeepaliveEnable = true; config.LogConnectionClose = false; config.ReconnectBackoffMaxMs = 3333; return(config); }); return(builder); }
/// <summary> /// Adds a <see cref="ProducerConfig"/> customizer to the builder. This provides the ability to customize and/or completely replace the configuration /// used to build the producer /// </summary> public static void AddCustomizer(KafkaProducerConfigurationBuilder builder, Func <ProducerConfig, ProducerConfig> customizer) => builder._customizers.Add(customizer);
static IProducerImplementation RegisterProducerImplementation(IEnumerable <string> bootstrapServers, IResolutionContext c, KafkaProducerConfigurationBuilder builder) { var loggerFactory = c.Get <ILoggerFactory>(); return(new KafkaProducerImplementation( loggerFactory: loggerFactory, address: string.Join(";", bootstrapServers), configurationCustomizer: builder.Apply )); }