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);
    }
示例#2
0
 public static KafkaConsumerConfigurationBuilder WithCertificate(this KafkaConsumerConfigurationBuilder builder, string sslCaLocation)
 {
     KafkaConsumerConfigurationBuilder.AddCustomizer(builder, config =>
     {
         config.SecurityProtocol = SecurityProtocol.Ssl;
         config.SslCaLocation    = sslCaLocation;
         return(config);
     });
     return(builder);
 }
示例#3
0
    /// <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);