/// <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)))); }
/// <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> /// 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)))); }
/// <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> /// Registers 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> public static IConsumerMiddlewareConfigurationBuilder AddSerializer <TSerializer, TResolver>( this IConsumerMiddlewareConfigurationBuilder middlewares) where TSerializer : class, IMessageSerializer where TResolver : class, IMessageTypeResolver { middlewares.DependencyConfigurator.AddTransient <TResolver>(); middlewares.DependencyConfigurator.AddTransient <TSerializer>(); return(middlewares.Add( resolver => new SerializerConsumerMiddleware( resolver.Resolve <TSerializer>(), resolver.Resolve <TResolver>()))); }
/// <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); }
/// <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)))); }