Exemple #1
0
        /// <summary>
        /// Creates the admin producer and consumer to control the application consumers and telemetry messages
        /// </summary>
        /// <param name="cluster">The cluster configuration builder</param>
        /// <param name="adminTopic">The topic to be used by the admin commands</param>
        /// <param name="adminConsumerGroup">The consumer group prefix</param>
        /// <returns></returns>
        public static IClusterConfigurationBuilder EnableAdminMessages(
            this IClusterConfigurationBuilder cluster,
            string adminTopic,
            string adminConsumerGroup)
        {
            cluster.DependencyConfigurator.AddSingleton <IAdminProducer, AdminProducer>();

            return(cluster
                   .AddProducer <AdminProducer>(
                       producer => producer
                       .DefaultTopic(adminTopic)
                       .AddMiddlewares(
                           middlewares => middlewares
                           .AddSerializer <ProtobufNetSerializer>()))
                   .AddConsumer(
                       consumer => consumer
                       .Topic(adminTopic)
                       .WithGroupId(
                           $"{adminConsumerGroup}-{Environment.MachineName}-{Convert.ToBase64String(Guid.NewGuid().ToByteArray())}")
                       .WithWorkersCount(1)
                       .WithBufferSize(1)
                       .WithAutoOffsetReset(AutoOffsetReset.Latest)
                       .AddMiddlewares(
                           middlewares => middlewares
                           .AddSerializer <ProtobufNetSerializer>()
                           .AddTypedHandlers(
                               handlers => handlers
                               .WithHandlerLifetime(InstanceLifetime.Singleton)
                               .AddHandlersFromAssemblyOf <ResetConsumerOffsetHandler>()))));
        }
Exemple #2
0
        /// <summary>
        /// Configures schema registry to the cluster
        /// </summary>
        /// <param name="cluster">Instance of <see cref="IClusterConfigurationBuilder"/></param>
        /// <param name="handler">A handler to set the configuration values</param>
        /// <returns></returns>
        public static IClusterConfigurationBuilder WithSchemaRegistry(
            this IClusterConfigurationBuilder cluster,
            Action <SchemaRegistryConfig> handler)
        {
            var config = new SchemaRegistryConfig();

            handler(config);
            cluster.DependencyConfigurator.AddSingleton <ISchemaRegistryClient>(_ => new CachedSchemaRegistryClient(config));
            return(cluster);
        }
        /// <summary>
        /// Creates the telemetry producer and consumer to send and receive metric messages
        /// </summary>
        /// <param name="cluster">The cluster configuration builder</param>
        /// <param name="topicName">The topic to be used by the metric commands</param>
        /// <param name="consumerGroup">The consumer group prefix</param>
        /// <returns></returns>
        public static IClusterConfigurationBuilder EnableTelemetry(
            this IClusterConfigurationBuilder cluster,
            string topicName,
            string consumerGroup)
        {
            cluster.DependencyConfigurator
            .AddSingleton <ITelemetryScheduler, TelemetryScheduler>()
            .AddSingleton <ITelemetryStorage>(
                resolver =>
                new MemoryTelemetryStorage(
                    TimeSpan.FromMinutes(10),
                    TimeSpan.FromHours(6),
                    resolver.Resolve <IDateTimeProvider>()));

            var groupId     = $"{consumerGroup}-{Environment.MachineName}-{Convert.ToBase64String(Guid.NewGuid().ToByteArray())}";
            var telemetryId = $"telemetry-{Convert.ToBase64String(Guid.NewGuid().ToByteArray())}";

            return(cluster
                   .AddProducer(
                       telemetryId,
                       producer => producer
                       .DefaultTopic(topicName)
                       .AddMiddlewares(
                           middlewares => middlewares
                           .AddSerializer <ProtobufNetSerializer>()))
                   .AddConsumer(
                       consumer => consumer
                       .Topic(topicName)
                       .WithName(telemetryId)
                       .WithGroupId(groupId)
                       .WithWorkersCount(1)
                       .DisableManagement()
                       .WithBufferSize(10)
                       .WithAutoOffsetReset(AutoOffsetReset.Latest)
                       .AddMiddlewares(
                           middlewares => middlewares
                           .AddSerializer <ProtobufNetSerializer>()
                           .AddTypedHandlers(
                               handlers => handlers
                               .WithHandlerLifetime(InstanceLifetime.Singleton)
                               .AddHandler <ConsumerTelemetryMetricHandler>())))
                   .OnStarted(resolver => resolver.Resolve <ITelemetryScheduler>().Start(telemetryId, topicName))
                   .OnStopping(resolver => resolver.Resolve <ITelemetryScheduler>().Stop(telemetryId)));
        }
Exemple #4
0
 /// <inheritdoc cref="EnableAdminMessages(KafkaFlow.Configuration.IClusterConfigurationBuilder,string,string)"/>
 public static IClusterConfigurationBuilder EnableAdminMessages(
     this IClusterConfigurationBuilder cluster,
     string adminTopic)
 {
     return(cluster.EnableAdminMessages(adminTopic, $"Admin-{Assembly.GetEntryAssembly().GetName().Name}"));
 }
 /// <inheritdoc cref="EnableTelemetry(KafkaFlow.Configuration.IClusterConfigurationBuilder,string,string)"/>
 public static IClusterConfigurationBuilder EnableTelemetry(
     this IClusterConfigurationBuilder cluster,
     string topicName)
 {
     return(cluster.EnableTelemetry(topicName, $"Telemetry-{Assembly.GetEntryAssembly().GetName().Name}"));
 }
 public static IClusterConfigurationBuilder EnableAdminMessages(
     this IClusterConfigurationBuilder cluster,
     string adminTopic)
 {
     return(cluster.EnableAdminMessages(adminTopic, $"Admin.{Environment.MachineName}"));
 }