Example #1
0
 /// <summary>
 /// Registers a middleware to deserialize avro messages using schema registry
 /// </summary>
 /// <param name="middlewares">The middleware configuration builder</param>
 /// <returns></returns>
 public static IConsumerMiddlewareConfigurationBuilder AddSchemaRegistryAvroSerializer(
     this IConsumerMiddlewareConfigurationBuilder middlewares)
 {
     return(middlewares.AddSerializer(
                resolver => new ConfluentAvroSerializer(resolver),
                resolver => new SchemaRegistryTypeResolver(new ConfluentAvroTypeNameResolver(resolver.Resolve <ISchemaRegistryClient>()))));
 }
 /// <summary>
 /// Registers a middleware to deserialize json messages using schema registry
 /// </summary>
 /// <param name="middlewares">The middleware configuration builder</param>
 /// <typeparam name="TMessage">The message type</typeparam>
 /// <returns></returns>
 public static IConsumerMiddlewareConfigurationBuilder AddSchemaRegistryJsonSerializer <TMessage>(
     this IConsumerMiddlewareConfigurationBuilder middlewares)
 {
     return(middlewares.AddSerializer(
                resolver => new ConfluentJsonSerializer(resolver),
                _ => new SingleMessageTypeResolver(typeof(TMessage))));
 }
 /// <summary>
 /// Registers a middleware to decompress the message
 /// </summary>
 /// <param name="middlewares"></param>
 /// <param name="factory">A factory to create the <see cref="IMessageCompressor"/> instance</param>
 /// <returns></returns>
 public static IConsumerMiddlewareConfigurationBuilder AddCompressor <T>(
     this IConsumerMiddlewareConfigurationBuilder middlewares,
     Factory <T> factory)
     where T : class, IMessageCompressor
 {
     return(middlewares.Add(resolver => new CompressorConsumerMiddleware(factory(resolver))));
 }
Example #4
0
 /// <summary>
 /// Registers a middleware to deserialize messages
 /// </summary>
 /// <typeparam name="TSerializer">A class that implements <see cref="IMessageSerializer"/></typeparam>
 public static IConsumerMiddlewareConfigurationBuilder AddSerializer <TSerializer>(
     this IConsumerMiddlewareConfigurationBuilder consumer)
     where TSerializer : class, IMessageSerializer
 {
     return(consumer.AddSerializer(
                resolver => resolver.Resolve <TSerializer>(),
                resolver => resolver.Resolve <DefaultMessageTypeResolver>()));
 }
Example #5
0
 /// <summary>
 /// Register a middleware to deserialize the message to a fixed type
 /// </summary>
 /// <param name="middlewares">The middleware configuration builder</param>
 /// <param name="serializerFactory">A factory to create a <see cref="ISerializer"/></param>
 /// <typeparam name="TMessage">The message type</typeparam>
 /// <typeparam name="TSerializer">A class that implements <see cref="ISerializer"/></typeparam>
 /// <returns></returns>
 public static IConsumerMiddlewareConfigurationBuilder AddSingleTypeSerializer <TMessage, TSerializer>(
     this IConsumerMiddlewareConfigurationBuilder middlewares,
     Factory <TSerializer> serializerFactory)
     where TSerializer : class, ISerializer
 {
     return(middlewares.AddSerializer(
                serializerFactory,
                _ => new SingleMessageTypeResolver(typeof(TMessage))));
 }
 /// <summary>
 /// Register a middleware to deserialize messages
 /// </summary>
 /// <typeparam name="TSerializer">A class that implements <see cref="IMessageSerializer"/></typeparam>
 /// <param name="middlewares"></param>
 /// <param name="serializerFactory">A factory to create a <see cref="IMessageSerializer"/></param>
 public static IConsumerMiddlewareConfigurationBuilder AddSerializer <TSerializer>(
     this IConsumerMiddlewareConfigurationBuilder middlewares,
     Factory <TSerializer> serializerFactory)
     where TSerializer : class, IMessageSerializer
 {
     return(middlewares.AddSerializer(
                serializerFactory,
                resolver => new DefaultMessageTypeResolver()));
 }
Example #7
0
 /// <summary>
 /// Register a middleware to deserialize the message to a fixed type
 /// </summary>
 /// <param name="consumer"></param>
 /// <param name="serializerFactory">A factory to create a <see cref="IMessageSerializer"/></param>
 /// <typeparam name="TMessage">The message type</typeparam>
 /// <typeparam name="TSerializer">A class that implements <see cref="IMessageSerializer"/></typeparam>
 /// <returns></returns>
 public static IConsumerMiddlewareConfigurationBuilder AddSingleTypeSerializer <TMessage, TSerializer>(
     this IConsumerMiddlewareConfigurationBuilder consumer,
     Factory <TSerializer> serializerFactory)
     where TSerializer : class, IMessageSerializer
 {
     return(consumer.AddSerializer(
                serializerFactory,
                resolver => resolver.Resolve <SingleMessageTypeResolver <TMessage> >()));
 }
        /// <summary>
        /// Registers a middleware to deserialize messages
        /// </summary>
        /// <typeparam name="TSerializer">A class that implements <see cref="IMessageSerializer"/></typeparam>
        public static IConsumerMiddlewareConfigurationBuilder AddSerializer <TSerializer>(
            this IConsumerMiddlewareConfigurationBuilder middlewares)
            where TSerializer : class, IMessageSerializer
        {
            middlewares.DependencyConfigurator.AddTransient <TSerializer>();

            return(middlewares.AddSerializer(
                       resolver => resolver.Resolve <TSerializer>(),
                       resolver => new DefaultMessageTypeResolver()));
        }
Example #9
0
        /// <summary>
        /// Register a middleware to deserialize the message to a fixed type
        /// </summary>
        /// <param name="middlewares">The middleware configuration builder</param>
        /// <param name="messageType">The message type</param>
        /// <typeparam name="TSerializer">A class that implements <see cref="ISerializer"/></typeparam>
        /// <returns></returns>
        public static IConsumerMiddlewareConfigurationBuilder AddSingleTypeSerializer <TSerializer>(
            this IConsumerMiddlewareConfigurationBuilder middlewares,
            Type messageType)
            where TSerializer : class, ISerializer
        {
            middlewares.DependencyConfigurator.AddTransient <TSerializer>();

            return(middlewares.AddSerializer(
                       resolver => resolver.Resolve <TSerializer>(),
                       _ => new SingleMessageTypeResolver(messageType)));
        }
        /// <summary>
        /// Register a middleware to decompress the message
        /// </summary>
        /// <typeparam name="T">A class that implements <see cref="IMessageCompressor"/></typeparam>
        /// <param name="middlewares"></param>
        /// <param name="factory">A factory to create the <see cref="IMessageCompressor"/> instance</param>
        /// <returns></returns>
        public static IConsumerMiddlewareConfigurationBuilder AddCompressor <T>(
            this IConsumerMiddlewareConfigurationBuilder middlewares,
            Factory <T> factory)
            where T : class, IMessageCompressor
        {
            middlewares.DependencyConfigurator.AddSingleton <IMessageCompressor, T>();
            middlewares.DependencyConfigurator.AddSingleton <T>();

            return(middlewares.Add(
                       provider => new CompressorConsumerMiddleware(factory(provider))));
        }
 /// <summary>
 /// Accumulates a group of messages to be passed as a batch to the next middleware as just one message
 /// </summary>
 /// <param name="builder">The configuration builder</param>
 /// <param name="batchSize">The maximum size of the batch, when this limit is reached the next middleware will be called</param>
 /// <param name="batchTimeout">The maximum time the middleware will wait to call the next middleware</param>
 /// <returns></returns>
 public static IConsumerMiddlewareConfigurationBuilder BatchConsume(
     this IConsumerMiddlewareConfigurationBuilder builder,
     int batchSize,
     TimeSpan batchTimeout)
 {
     return(builder.Add(
                resolver => new BatchConsumeMiddleware(
                    batchSize,
                    batchTimeout,
                    resolver.Resolve <ILogHandler>()),
                MiddlewareLifetime.Worker));
 }
 /// <summary>
 /// Register a middleware to deserialize messages
 /// </summary>
 /// <typeparam name="TSerializer">A class that implements <see cref="IMessageSerializer"/></typeparam>
 /// <typeparam name="TResolver">A class that implements <see cref="IMessageTypeResolver"/></typeparam>
 /// <param name="middlewares"></param>
 /// <param name="serializerFactory">A factory to create a <see cref="IMessageSerializer"/></param>
 /// <param name="resolverFactory">A factory to create a <see cref="IMessageTypeResolver"/></param>
 public static IConsumerMiddlewareConfigurationBuilder AddSerializer <TSerializer, TResolver>(
     this IConsumerMiddlewareConfigurationBuilder middlewares,
     Factory <TSerializer> serializerFactory,
     Factory <TResolver> resolverFactory)
     where TSerializer : class, IMessageSerializer
     where TResolver : class, IMessageTypeResolver
 {
     return(middlewares.Add(
                resolver => new SerializerConsumerMiddleware(
                    serializerFactory(resolver),
                    resolverFactory(resolver))));
 }
Example #13
0
        /// <summary>
        /// Adds typed handler middleware
        /// </summary>
        /// <param name="builder">Instance of <see cref="IConsumerMiddlewareConfigurationBuilder"/></param>
        /// <param name="configure">A handler to configure the middleware</param>
        /// <returns></returns>
        public static IConsumerMiddlewareConfigurationBuilder AddTypedHandlers(
            this IConsumerMiddlewareConfigurationBuilder builder,
            Action <TypedHandlerConfigurationBuilder> configure)
        {
            var typedHandlerBuilder = new TypedHandlerConfigurationBuilder(builder.DependencyConfigurator);

            configure(typedHandlerBuilder);

            var configuration = typedHandlerBuilder.Build();

            builder.DependencyConfigurator.AddSingleton(configuration);
            builder.Add(resolver => new TypedHandlerMiddleware(resolver, configuration));

            return(builder);
        }
Example #14
0
        /// <summary>
        /// Register a middleware to deserialize messages
        /// </summary>
        /// <typeparam name="TSerializer">A class that implements <see cref="IMessageSerializer"/></typeparam>
        /// <typeparam name="TResolver">A class that implements <see cref="IMessageTypeResolver"/></typeparam>
        /// <param name="middlewares"></param>
        /// <param name="serializerFactory">A factory to create a <see cref="IMessageSerializer"/></param>
        /// <param name="resolverFactory">A factory to create a <see cref="IMessageTypeResolver"/></param>
        public static IConsumerMiddlewareConfigurationBuilder AddSerializer <TSerializer, TResolver>(
            this IConsumerMiddlewareConfigurationBuilder middlewares,
            Factory <TSerializer> serializerFactory,
            Factory <TResolver> resolverFactory)
            where TSerializer : class, IMessageSerializer
            where TResolver : class, IMessageTypeResolver
        {
            middlewares.DependencyConfigurator.AddSingleton <IMessageSerializer, TSerializer>();
            middlewares.DependencyConfigurator.AddSingleton <IMessageTypeResolver, TResolver>();
            middlewares.DependencyConfigurator.AddSingleton <TSerializer>();
            middlewares.DependencyConfigurator.AddSingleton <TResolver>();

            return(middlewares.Add(
                       provider => new SerializerConsumerMiddleware(
                           serializerFactory(provider),
                           resolverFactory(provider))));
        }
Example #15
0
 public ConsumerConfigurationBuilder(IDependencyConfigurator dependencyConfigurator)
 {
     this.DependencyConfigurator         = dependencyConfigurator;
     this.middlewareConfigurationBuilder = new ConsumerMiddlewareConfigurationBuilder(dependencyConfigurator);
 }
 /// <summary>
 /// Register a middleware to decompress the message
 /// </summary>
 /// <typeparam name="T">A class that implements <see cref="IMessageCompressor"/></typeparam>
 public static IConsumerMiddlewareConfigurationBuilder AddCompressor <T>(
     this IConsumerMiddlewareConfigurationBuilder middlewares)
     where T : class, IMessageCompressor
 {
     return(middlewares.AddCompressor(resolver => resolver.Resolve <T>()));
 }
 /// <summary>
 /// Register a middleware to deserialize the message to a fixed type
 /// </summary>
 /// <param name="middlewares"></param>
 /// <typeparam name="TSerializer">A class that implements <see cref="IMessageSerializer"/></typeparam>
 /// <typeparam name="TMessage">The message type</typeparam>
 /// <returns></returns>
 public static IConsumerMiddlewareConfigurationBuilder AddSingleTypeSerializer <TMessage, TSerializer>(
     this IConsumerMiddlewareConfigurationBuilder middlewares)
     where TSerializer : class, IMessageSerializer
 {
     return(middlewares.AddSerializer <TSerializer, SingleMessageTypeResolver <TMessage> >());
 }
 /// <summary>
 /// Registers a middleware to decompress the message
 /// </summary>
 public static IConsumerMiddlewareConfigurationBuilder AddCompressor <T>(this IConsumerMiddlewareConfigurationBuilder middlewares)
     where T : class, IMessageCompressor
 {
     middlewares.DependencyConfigurator.AddTransient <T>();
     return(middlewares.AddCompressor(resolver => resolver.Resolve <T>()));
 }
Example #19
0
 /// <summary>
 /// Register a middleware to deserialize the message to a fixed type
 /// </summary>
 /// <param name="middlewares">The middleware configuration builder</param>
 /// <typeparam name="TMessage">The message type</typeparam>
 /// <typeparam name="TSerializer">A class that implements <see cref="ISerializer"/></typeparam>
 /// <returns></returns>
 public static IConsumerMiddlewareConfigurationBuilder AddSingleTypeSerializer <TMessage, TSerializer>(
     this IConsumerMiddlewareConfigurationBuilder middlewares)
     where TSerializer : class, ISerializer
 {
     return(middlewares.AddSingleTypeSerializer <TSerializer>(typeof(TMessage)));
 }