public static KafkaConsumerConfigurationBuilder UseKafka(this StandardConfigurer <IConsumerImplementation> configurer, IEnumerable <string> bootstrapServers) { var builder = new KafkaConsumerConfigurationBuilder(); 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."); var consumerContext = c.Get <ConsumerContext>(); var partitionsAssignedHandler = builder.GetPartitionsAssignedHandler(); var partitionsRevokedHandler = builder.GetPartitionsRevokedHandler(); var startPosition = c.Has <PositionsStorageConfigurationExtensions.ExplicitlySetInitialPosition>() ? c.Get <PositionsStorageConfigurationExtensions.ExplicitlySetInitialPosition>().Position : StartFromPosition.Beginning; return(new KafkaConsumerImplementation( loggerFactory: loggerFactory, address: string.Join("; ", bootstrapServers), topics: topics, group: group.Id, consumerDispatcher: consumerDispatcher, positionManager: positionManager, context: consumerContext, configurationCustomizer: config => builder.Apply(config), partitionsAssignedHandler: partitionsAssignedHandler, partitionsRevokedHandler: partitionsRevokedHandler, startPosition: startPosition )); }); return(builder); }
public static KafkaConsumerConfigurationBuilder WithCertificate(this KafkaConsumerConfigurationBuilder builder, string sslCaLocation) { KafkaConsumerConfigurationBuilder.AddCustomizer(builder, config => { config.SecurityProtocol = SecurityProtocol.Ssl; config.SslCaLocation = sslCaLocation; return(config); }); return(builder); }
/// <summary> /// Configures the Kafka client with good defaults for connecting to Confluent Cloud /// </summary> public static KafkaConsumerConfigurationBuilder WithConfluentCloud(this KafkaConsumerConfigurationBuilder builder, string key, string secret) { KafkaConsumerConfigurationBuilder.AddCustomizer(builder, config => { config.SaslUsername = key; config.SaslPassword = secret; config.SessionTimeoutMs = 45000; 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="ConsumerConfig"/> customizer to the builder. This provides the ability to customize and/or completely replace the configuration /// used to build the consumer /// </summary> public static void AddCustomizer(KafkaConsumerConfigurationBuilder builder, Func <ConsumerConfig, ConsumerConfig> customizer) => builder._customizers.Add(customizer);