예제 #1
0
        private static void ConfigureBus(ContainerBuilder builder)
        {
            builder.Register <IInstanceFactory>(context =>
            {
                var options           = context.Resolve <RabbitMqOptions>();
                var configuration     = context.Resolve <RawRabbitConfiguration>();
                var namingConventions = new CustomNamingConventions(options.Namespace);

                return(RawRabbitFactory.CreateInstanceFactory(new RawRabbitOptions
                {
                    DependencyInjection = ioc =>
                    {
                        ioc.AddSingleton(options);
                        ioc.AddSingleton(configuration);
                        ioc.AddSingleton <INamingConventions>(namingConventions);
                    },
                    Plugins = p => p
                              .UseAttributeRouting()
                              .UseRetryLater()
                              .UpdateRetryInfo()
                              .UseMessageContext <CorrelationContext>()
                              .UseContextForwarding()
                }));
            }).SingleInstance();

            // In case of 'BrokerUnreachableException' - this indicates that a RabbitMQ instance
            // isn't running. Please run 'docker-compose -f ./compose/infrastructure.yml up' to resolve this.
            builder.Register(context => context.Resolve <IInstanceFactory>().Create());
        }
예제 #2
0
        private static void ConfigureBus(ContainerBuilder builder)
        {
            builder.Register <IInstanceFactory>(context =>
            {
                var options           = context.Resolve <RabbitMqOptions>();
                var configuration     = context.Resolve <RawRabbitConfiguration>();
                var namingConventions = new CustomNamingConventions(options.Namespace);

                return(RawRabbitFactory.CreateInstanceFactory(new RawRabbitOptions
                {
                    DependencyInjection = ioc =>
                    {
                        ioc.AddSingleton(options);
                        ioc.AddSingleton(configuration);
                        ioc.AddSingleton <INamingConventions>(namingConventions);
                    },
                    Plugins = p => p
                              .UseAttributeRouting()
                              .UseRetryLater()
                              .UpdateRetryInfo()
                              .UseMessageContext <CorrelationContext>()
                              .UseContextForwarding()
                }));
            }).SingleInstance();
            builder.Register(context => context.Resolve <IInstanceFactory>().Create());
        }
예제 #3
0
        public static void AddRabbitMQServices(this ContainerBuilder builder)
        {
            builder.Register(context =>
            {
                var configuration = context.Resolve <IConfiguration>();
                var options       = configuration.GetOptions <RabbitMqOptions>("rabbitMq");

                return(options);
            }).SingleInstance();

            builder.Register(context =>
            {
                var configuration = context.Resolve <IConfiguration>();
                var options       = configuration.GetOptions <RawRabbitConfiguration>("rabbitMq");

                return(options);
            }).SingleInstance();

            var assembly = Assembly.GetCallingAssembly();

            builder.RegisterAssemblyTypes(assembly)
            .AsClosedTypesOf(typeof(IEventHandler <>))
            .InstancePerDependency();
            builder.RegisterAssemblyTypes(assembly)
            .AsClosedTypesOf(typeof(ICommandHandler <>))
            .InstancePerDependency();
            builder.RegisterType <BusPublisher>().As <IBusPublisher>()
            .InstancePerDependency();

            builder.Register <IInstanceFactory>(context =>
            {
                var options           = context.Resolve <RabbitMqOptions>();
                var configuration     = context.Resolve <RawRabbitConfiguration>();
                var namingConventions = new CustomNamingConventions(options.Namespace);
                // var tracer = context.Resolve<ITracer> ();

                return(RawRabbitFactory.CreateInstanceFactory(new RawRabbitOptions
                {
                    DependencyInjection = ioc =>
                    {
                        ioc.AddSingleton(options);
                        ioc.AddSingleton(configuration);
                        ioc.AddSingleton <INamingConventions>(namingConventions);
                        // ioc.AddSingleton (tracer);
                    },
                    Plugins = p => p
                              .UseAttributeRouting()
                              .UseRetryLater()
                              .UpdateRetryInfo()
                              .UseMessageContext <CorrelationContext>()
                              .UseContextForwarding()
                              // .UseJaeger (tracer)
                }));
            }).SingleInstance();
            builder.Register(context => context.Resolve <IInstanceFactory>().Create());
        }
예제 #4
0
        private static void ConfigureBus(IServiceCollection services, IConfiguration configuration)
        {
            var rawRabbitOptions       = configuration.GetOptions <RabbitMqOptions>(SectionName);
            var rawRabbitConfiguration = configuration.GetOptions <RawRabbitConfiguration>(SectionName);
            var namingConventions      = new CustomNamingConventions(rawRabbitOptions.Namespace);
            var options = new RawRabbitOptions
            {
                DependencyInjection = ioc =>
                {
                    ioc.AddSingleton(rawRabbitOptions);
                    ioc.AddSingleton(rawRabbitConfiguration);
                    ioc.AddSingleton <INamingConventions>(namingConventions);
                },
                Plugins = p => p.UseAttributeRouting().UseMessageContext <CorrelationContext>().UseContextForwarding()
            };

            services.AddRawRabbit(options);
        }
예제 #5
0
        public static void AddRabbitMq(this ContainerBuilder builder)
        {
            builder.Register(context =>
            {
                var configuration = context.Resolve <IConfiguration>();
                var options       = new RabbitMqOptions();
                configuration.GetSection("rabbitmq").Bind(options);
                return(options);
            }).SingleInstance();

            builder.Register(context =>
            {
                var configuration = context.Resolve <IConfiguration>();
                var options       = new RawRabbitConfiguration();
                configuration.GetSection("rabbitmq").Bind(options);
                return(options);
            }).SingleInstance();

            builder.Register <IInstanceFactory>(context =>
            {
                var options           = context.Resolve <RabbitMqOptions>();
                var configuration     = context.Resolve <RawRabbitConfiguration>();
                var namingConventions = new CustomNamingConventions(options.Namespace);

                var tracer = context.Resolve <ITracer>();

                return(RawRabbitFactory.CreateInstanceFactory(new RawRabbitOptions
                {
                    DependencyInjection = ioc =>
                    {
                        ioc.AddSingleton(options);
                        ioc.AddSingleton(configuration);
                        ioc.AddSingleton <INamingConventions>(namingConventions);
                        ioc.AddSingleton(tracer);
                    },
                    ClientConfiguration = options,
                    Plugins = p => p
                              .UseMessageContext <CorrelationContext>()
                              .UseContextForwarding()
                              .UseJaeger(tracer)
                }));
            }).SingleInstance();
            builder.Register(context => context.Resolve <IInstanceFactory>().Create());
        }
        private static void ConfigureBus <TContext>(IConveyBuilder builder,
                                                    Func <IRabbitMqPluginRegister, IRabbitMqPluginRegister> plugins = null)
            where TContext : ICorrelationContext, new()
        {
            builder.Services.AddSingleton <IInstanceFactory>(serviceProvider =>
            {
                var register          = plugins?.Invoke(new RabbitMqPluginRegister(serviceProvider));
                var options           = serviceProvider.GetService <RabbitMqOptions>();
                var configuration     = serviceProvider.GetService <RawRabbitConfiguration>();
                var namingConventions = new CustomNamingConventions(options.Namespace);

                return(RawRabbitFactory.CreateInstanceFactory(new RawRabbitOptions
                {
                    DependencyInjection = ioc =>
                    {
                        register?.Register(ioc);
                        ioc.AddSingleton(options);
                        ioc.AddSingleton(configuration);
                        ioc.AddSingleton(serviceProvider);
                        ioc.AddSingleton <INamingConventions>(namingConventions);
                        ioc.AddSingleton <ISerializer, Serializer <TContext> >(ctx =>
                                                                               new Serializer <TContext>(ctx.GetService <JsonSerializer>()));
                    },
                    Plugins = p =>
                    {
                        register?.Register(p);
                        p.UseAttributeRouting()
                        .UseRetryLater()
                        .UpdateRetryInfo()
                        .UseMessageContext <TContext>()
                        .UseContextForwarding();

                        if (options.MessageProcessor?.Enabled == true)
                        {
                            p.ProcessUniqueMessages();
                        }
                    }
                }));
            });

            builder.Services.AddTransient(serviceProvider => serviceProvider.GetService <IInstanceFactory>().Create());
        }
예제 #7
0
        private static void ConfigureBus(ContainerBuilder builder)
        {
            builder.Register <IInstanceFactory>(context =>
            {
                var options           = context.Resolve <RabbitMqOptions>();
                var configuration     = context.Resolve <RawRabbitConfiguration>();
                var namingConventions = new CustomNamingConventions(options.Namespace);

                return(RawRabbitFactory.CreateInstanceFactory(new RawRabbitOptions
                {
                    DependencyInjection = ioc =>
                    {
                        ioc.AddSingleton(options);
                        ioc.AddSingleton(configuration);
                        ioc.AddSingleton <INamingConventions>(namingConventions);
                    }
                }));
            }).SingleInstance();
            builder.Register(context => context.Resolve <IInstanceFactory>().Create());
        }