コード例 #1
0
        public static async Task <UpdateableServiceProvider> StartNServiceBus(this UpdateableServiceProvider serviceProvider, IConfiguration configuration)
        {
            var connectionFactory = serviceProvider.GetService <IConnectionFactory>();

            var endpointConfiguration = new EndpointConfiguration("SFA.DAS.ApprenticeCommitments.Api")
                                        .UseMessageConventions()
                                        .UseNewtonsoftJsonSerializer()
                                        .UseOutbox(true)
                                        .UseServicesBuilder(serviceProvider)
                                        .UseSqlServerPersistence(() => connectionFactory.CreateConnection(configuration["ApplicationSettings:DbConnectionString"]))
                                        .UseUnitOfWork();

            if (UseLearningTransport(configuration))
            {
                endpointConfiguration.UseTransport <LearningTransport>();
            }
            else
            {
                endpointConfiguration.UseAzureServiceBusTransport(configuration["ApplicationSettings:NServiceBusConnectionString"]);
            }

            if (!string.IsNullOrEmpty(configuration["ApplicationSettings:NServiceBusLicense"]))
            {
                endpointConfiguration.License(configuration["ApplicationSettings:NServiceBusLicense"]);
            }

            var endpoint = await Endpoint.Start(endpointConfiguration);

            serviceProvider.AddSingleton(p => endpoint)
            .AddSingleton <IMessageSession>(p => p.GetService <IEndpointInstance>())
            .AddHostedService <NServiceBusHostedService>();

            return(serviceProvider);
        }
 public void ConfigureContainer(UpdateableServiceProvider serviceProvider)
 {
     if (!Configuration["Environment"].Equals("DEV", StringComparison.CurrentCultureIgnoreCase))
     {
         serviceProvider.StartNServiceBus(Configuration, ConfigurationIsLocalOrDev());
     }
 }
        public static void StartNServiceBus(this UpdateableServiceProvider serviceProvider,
                                            IConfiguration configuration, bool configurationIsLocalOrDev)
        {
            var endpointConfiguration = new EndpointConfiguration("SFA.DAS.Reservations.Api")
                                        .UseInstallers()
                                        .UseMessageConventions()
                                        .UseNewtonsoftJsonSerializer()
                                        .UseOutbox(true)
                                        .UseServicesBuilder(serviceProvider)
                                        .UseSqlServerPersistence(() => new SqlConnection(configuration["Reservations:ConnectionString"]))
                                        .UseUnitOfWork();

            if (configurationIsLocalOrDev)
            {
                endpointConfiguration.UseLearningTransport();
            }
            else
            {
                endpointConfiguration.UseAzureServiceBusTransport(
                    configuration["Reservations:NServiceBusConnectionString"], r => { });
            }

            if (!string.IsNullOrEmpty(configuration["Reservations:NServiceBusLicense"]))
            {
                endpointConfiguration.License(configuration["Reservations:NServiceBusLicense"]);
            }


            var endpoint = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            serviceProvider.AddSingleton(p => endpoint)
            .AddSingleton <IMessageSession>(p => p.GetService <IEndpointInstance>())
            .AddHostedService <NServiceBusHostedService>();
        }
コード例 #4
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddCors(c =>
            {
                c.AddPolicy("AllowOrigin", options => options.AllowAnyOrigin());
            });

            services.AddSingleton <IMessageRepository, MessageRepository>();
            services.AddTransient <EmailService>();
            services.AddTransient <SMSService>();
            services.AddTransient <Func <NotificationType, INotificationService> >(serviceProvider => key =>
            {
                switch (key)
                {
                case NotificationType.Email:
                    return(serviceProvider.GetService <EmailService>());

                case NotificationType.SMS:
                    return(serviceProvider.GetService <SMSService>());

                default:
                    throw new KeyNotFoundException();
                }
            });

            // services.AddSingleton<IPaymentRepository, PaymentRepository>();
            services.AddSingleton(sp => endpoint);
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            // Configure NServiceBus
            var endpointConfiguration = new EndpointConfiguration("Assignment.Notifications");
            var transport             = endpointConfiguration.UseTransport <LearningTransport>();

            endpointConfiguration.SendFailedMessagesTo("failed");
            endpointConfiguration.AuditProcessedMessagesTo("audit");
            endpointConfiguration.SendHeartbeatTo("Particular.ServiceControl");
            var metrics = endpointConfiguration.EnableMetrics();

            metrics.SendMetricDataToServiceControl("Particular.Monitoring", TimeSpan.FromMilliseconds(500));

            UpdateableServiceProvider container = null;

            endpointConfiguration.UseContainer <ServicesBuilder>(customizations =>
            {
                customizations.ExistingServices(services);
                customizations.ServiceProviderFactory(sc =>
                {
                    container = new UpdateableServiceProvider(sc);
                    return(container);
                });
            });

            endpoint = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            return(container);
        }
コード例 #5
0
        public static void MicroServicesModuleRegister(this IServiceCollection services, IConfiguration configuration)
        {
            IEndpointInstance endpointInstance = null;

            services.AddSingleton <IMessageSession>(_ => endpointInstance);

            var endpointConfiguration = new EndpointConfiguration(configuration.GetSection("MicroServices").GetSection("Endpoint").Value);
            var transport             = endpointConfiguration.UseTransport <RabbitMQTransport>();

            transport.ConnectionString(configuration.GetSection("Transport")["RabbitMQConnectionString"]);
            transport.UsePublisherConfirms(true);
            transport.UseDirectRoutingTopology();

            endpointConfiguration.EnableInstallers();
            endpointConfiguration.EnableCallbacks();

            var routerConfig = transport.Routing();

            routerConfig.RouteToEndpoint(
                assembly: typeof(MqttReceivedMessage).Assembly,
                destination: configuration.GetSection("MicroServices").GetSection("Endpoint").Value);
            routerConfig.RouteToEndpoint(
                assembly: typeof(MqttResponseMessage).Assembly,
                destination: configuration.GetSection("MicroServices").GetSection("Endpoint").Value);
            routerConfig.RouteToEndpoint(
                assembly: typeof(MqttConnectMessage).Assembly,
                destination: configuration.GetSection("MicroServices").GetSection("Endpoint").Value);
            routerConfig.RouteToEndpoint(
                assembly: typeof(MqttDisconnectMessage).Assembly,
                destination: configuration.GetSection("MicroServices").GetSection("Endpoint").Value);

            var discriminator = configuration.GetSection("MicroServices").GetSection("Discriminator").Value;

            endpointConfiguration.MakeInstanceUniquelyAddressable(discriminator);

            UpdateableServiceProvider container = null;

            endpointConfiguration.UseContainer <ServicesBuilder>(
                customizations: customizations =>
            {
                customizations.ExistingServices(services);
                customizations.ServiceProviderFactory(service =>
                {
                    container = new UpdateableServiceProvider(service);
                    return(container);
                });
            });

            endpointInstance = Task.Run(async() => await Endpoint.Start(endpointConfiguration)).Result;

            services.AddSingleton(typeof(IEndpointInstance), x => endpointInstance);
        }
コード例 #6
0
        public static async Task <UpdateableServiceProvider> StartNServiceBus(
            this UpdateableServiceProvider serviceProvider,
            IConfiguration configuration)
        {
            var endpointName = configuration["ApplicationSettings:NServiceBusEndpointName"];

            if (string.IsNullOrEmpty(endpointName))
            {
                endpointName = "SFA.DAS.EmployerIncentives.Functions.DomainMessageHandlers";
            }

            var endpointConfiguration = new EndpointConfiguration(endpointName)
                                        .UseMessageConventions()
                                        .UseNewtonsoftJsonSerializer()
                                        .UseOutbox(true)
                                        .UseServicesBuilder(serviceProvider)
                                        .UseSqlServerPersistence(() => new SqlConnection(configuration["ApplicationSettings:DbConnectionString"]))
                                        .UseUnitOfWork();

            if (configuration["ApplicationSettings:NServiceBusConnectionString"].Equals("UseLearningEndpoint=true", StringComparison.CurrentCultureIgnoreCase))
            {
                endpointConfiguration
                .UseTransport <LearningTransport>()
                .StorageDirectory(configuration.GetValue("ApplicationSettings:UseLearningEndpointStorageDirectory",
                                                         Path.Combine(
                                                             Directory.GetCurrentDirectory().Substring(0, Directory.GetCurrentDirectory().IndexOf("src")),
                                                             @"src\SFA.DAS.EmployerIncentives.Functions.TestConsole\.learningtransport")));
                endpointConfiguration.UseLearningTransport(s => s.AddRouting());
            }
            else
            {
                endpointConfiguration
                .UseAzureServiceBusTransport(configuration["ApplicationSettings:NServiceBusConnectionString"], r => r.AddRouting());
            }

            if (!string.IsNullOrEmpty(configuration["ApplicationSettings:NServiceBusLicense"]))
            {
                endpointConfiguration.License(configuration["ApplicationSettings:NServiceBusLicense"]);
            }

            var endpoint = await Endpoint.Start(endpointConfiguration);

            serviceProvider.AddSingleton(p => endpoint)
            .AddSingleton <IMessageSession>(p => p.GetService <IEndpointInstance>())
            .AddHostedService <NServiceBusHostedService>();

            return(serviceProvider);
        }
コード例 #7
0
ファイル: Startup.cs プロジェクト: daazarov/SDmS
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddLogging(loggingBuilder =>
            {
                loggingBuilder.AddConsole();
            });

            services.AddScoped <ReusedComponent>();

            services.AddTransport();

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata      = false;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = true,
                    ValidIssuer              = Configuration["ISSUER"],
                    ValidateAudience         = true,
                    ValidAudience            = Configuration["AUDIENCE"],
                    ValidateLifetime         = true,
                    IssuerSigningKey         = AuthOptions.GetSymmetricSecurityKey(Configuration["SECRET_KEY"]),
                    ValidateIssuerSigningKey = true,
                };
            });

            var endpointConfiguration = services.AddNServiceBus(Configuration);

            #region Create IoC container
            UpdateableServiceProvider container = null;
            endpointConfiguration.UseContainer <ServicesBuilder>(customizations =>
            {
                customizations.ExistingServices(services);
                customizations.ServiceProviderFactory(sc =>
                {
                    container = new UpdateableServiceProvider(sc);
                    return(container);
                });
            });
            #endregion

            NServiceBus.Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            return(container);
        }
コード例 #8
0
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services
            .AddMvcCore()
            .AddCors()
            .AddJsonFormatters()
            .AddApiExplorer()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services
            .AddSignalR();
            services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/dist";
            });
            services.AddSingleton <IEquipmentRepository, EquipmentRepository>();
            services.AddScoped <EquipmentFilter>();
            services.AddSingleton(serviceProvider => _endpoint);

            var endpointConfiguration = new EndpointConfiguration("Bondora.ConstructionEquipmentRental.Service");

            // It's used for development, for real case we should use any real transport (RabbitMQ and so on).
            TransportExtensions <LearningTransport> transport = endpointConfiguration.UseTransport <LearningTransport>();

            UpdateableServiceProvider container = null;

            endpointConfiguration.UseContainer <ServicesBuilder>(customizations =>
            {
                customizations.ExistingServices(services);
                customizations.ServiceProviderFactory(serviceCollection =>
                {
                    container = new UpdateableServiceProvider(serviceCollection);
                    return(container);
                });
            });

            RoutingSettings <LearningTransport> routing = transport.Routing();

            routing.RouteToEndpoint(
                assembly: typeof(GetInvoiceCommand).Assembly,
                destination: "Bondora.ConstructionEquipmentRental.Billing");

            _endpoint = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            return(container);
        }
        public static void StartNServiceBus(this UpdateableServiceProvider serviceProvider, IConfiguration configuration)
        {
            var endpointName          = "SFA.DAS.UnitOfWork.Sample.Web";
            var endpointConfiguration = new EndpointConfiguration(endpointName)
                                        .UseLearningTransport()
                                        .UseErrorQueue($"{endpointName}-errors")
                                        .UseInstallers()
                                        .UseMessageConventions()
                                        .UseNewtonsoftJsonSerializer()
                                        .UseOutbox()
                                        .UseServicesBuilder(serviceProvider)
                                        .UseSqlServerPersistence(() => new SqlConnection(configuration.GetConnectionString("SampleDb")));

            var endpoint = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            serviceProvider.AddSingleton(p => endpoint)
            .AddSingleton <IMessageSession>(p => p.GetService <IEndpointInstance>())
            .AddHostedService <NServiceBusHostedService>();
        }
コード例 #10
0
    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        // register any services to IServiceCollection

        UpdateableServiceProvider container = null;

        endpointConfiguration.UseContainer <ServicesBuilder>(customizations =>
        {
            customizations.ExistingServices(services);
            customizations.ServiceProviderFactory(sc =>
            {
                container = new UpdateableServiceProvider(sc);
                return(container);
            });
        });

        endpoint = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

        return(container);
    }
コード例 #11
0
        public static async Task <UpdateableServiceProvider> StartNServiceBus(
            this UpdateableServiceProvider serviceProvider,
            IConfiguration configuration,
            string endpointName)
        {
            var config = configuration
                         .GetSection("NServiceBusConfiguration")
                         .Get <NServiceBusConfiguration>();

            var endpointConfiguration = new EndpointConfiguration(endpointName)
                                        .UseErrorQueue($"{endpointName}-errors")
                                        .UseInstallers()
                                        .UseMessageConventions()
                                        .UseNewtonsoftJsonSerializer()
                                        .UseNLogFactory();

            if (!string.IsNullOrEmpty(config.NServiceBusLicense))
            {
                endpointConfiguration.UseLicense(config.NServiceBusLicense);
            }

            endpointConfiguration.SendOnly();

            if (config.NServiceBusConnectionString.Equals("UseLearningEndpoint=true", StringComparison.CurrentCultureIgnoreCase))
            {
                endpointConfiguration.UseLearningTransport(s => s.AddRouting());
            }
            else
            {
                endpointConfiguration.UseAzureServiceBusTransport(config.NServiceBusConnectionString, s => s.AddRouting());
            }

            var endpoint = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            serviceProvider.AddSingleton(p => endpoint)
            .AddSingleton <IMessageSession>(p => p.GetService <IEndpointInstance>())
            .AddHostedService <NServiceBusHostedService>();

            return(serviceProvider);
        }
コード例 #12
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddCors(c =>
            {
                c.AddPolicy("AllowOrigin", options => options.AllowAnyOrigin());
            });

            services.AddSingleton <IOrderRepository, OrderRepository>();
            services.AddSingleton(sp => endpoint);
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            // Configure NServiceBus
            var endpointConfiguration = new EndpointConfiguration("Assignment.Orders");
            var transport             = endpointConfiguration.UseTransport <LearningTransport>();

            endpointConfiguration.SendFailedMessagesTo("failed");
            endpointConfiguration.AuditProcessedMessagesTo("audit");
            endpointConfiguration.SendHeartbeatTo("Particular.ServiceControl");
            var metrics = endpointConfiguration.EnableMetrics();

            metrics.SendMetricDataToServiceControl("Particular.Monitoring", TimeSpan.FromMilliseconds(500));

            UpdateableServiceProvider container = null;

            endpointConfiguration.UseContainer <ServicesBuilder>(customizations =>
            {
                customizations.ExistingServices(services);
                customizations.ServiceProviderFactory(sc =>
                {
                    container = new UpdateableServiceProvider(sc);
                    return(container);
                });
            });

            endpoint = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            return(container);
        }
コード例 #13
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.Configure <CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services.AddLogging(loggingBuilder => loggingBuilder.AddDebug());

            services.AddSingleton <BookingFakeRepository>();
            services.AddSingleton <BookedApartamentsFakeRepository>();
            services.AddScoped <ReusedComponent>();
            services.AddScoped <BookingService>();

            services.AddTransport();

            var endpointConfiguration = services.AddNServiceBus(Configuration);

            #region Create IoC container
            UpdateableServiceProvider container = null;
            endpointConfiguration.UseContainer <ServicesBuilder>(customizations =>
            {
                customizations.ExistingServices(services);
                customizations.ServiceProviderFactory(sc =>
                {
                    container = new UpdateableServiceProvider(sc);
                    return(container);
                });
            });
            #endregion

            NServiceBus.Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            return(container);
        }
コード例 #14
0
ファイル: Startup.cs プロジェクト: daazarov/SDmS
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddLogging(loggingBuilder =>
            {
                loggingBuilder.AddConsole();
            });

            services.AddScoped <ReusedComponent>();

            services.AddTransport();

            services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>();

            RegisterComponent <DataModule>(services, Configuration);
            RegisterComponent <DomainServicesModule>(services, Configuration);
            RegisterComponent <InfrastructureServicesModule>(services, Configuration);
            RegisterComponent <ModelMapperModule>(services, Configuration);

            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
            {
                options.RequireHttpsMetadata      = false;
                options.SaveToken                 = true;
                options.IncludeErrorDetails       = true;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = true,
                    ValidIssuer              = Configuration["ISSUER"],
                    ValidateAudience         = true,
                    ValidAudience            = Configuration["AUDIENCE"],
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = AuthOptions.GetSymmetricSecurityKey(Configuration["SECRET_KEY"]),
                    ValidateLifetime         = true,
                    ClockSkew = TimeSpan.FromSeconds(20)
                };
            });

            IEndpointInstance endpointInstance = null;

            services.AddSingleton <IEndpointInstance>(_ => endpointInstance);

            var endpointConfiguration = services.AddNServiceBus(Configuration);

            #region Create IoC container
            UpdateableServiceProvider container = null;
            endpointConfiguration.UseContainer <ServicesBuilder>(customizations =>
            {
                customizations.ExistingServices(services);
                customizations.ServiceProviderFactory(sc =>
                {
                    container = new UpdateableServiceProvider(sc);
                    return(container);
                });
            });
            #endregion

            endpointInstance = NServiceBus.Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            return(container);
        }
 public void ConfigureContainer(UpdateableServiceProvider serviceProvider)
 {
     serviceProvider.StartNServiceBus(Configuration).GetAwaiter().GetResult();
 }
コード例 #16
0
 public void ConfigureContainer(UpdateableServiceProvider serviceProvider)
 {
     serviceProvider.StartNServiceBus(Configuration, Environment.IsDevelopment());
 }
コード例 #17
0
        public static UpdateableServiceProvider AddNServiceBus(this IServiceCollection services, string endpointName)
        {
            UpdateableServiceProvider container     = null;
            EndpointConfiguration     configuration = new EndpointConfiguration(endpointName);

            configuration.UseSerialization <NewtonsoftSerializer>();
            configuration.EnableInstallers();
            configuration.DisableFeature <Heartbeats>();

            var transport = configuration.UseTransport <RabbitMQTransport>();

            configuration.UseTransport <RabbitMQTransport>();

            transport.UseDirectRoutingTopology();
            transport.ConnectionString("host=rabbitmq");
            var routing = transport.Routing();

            routing.RouteToEndpoint(typeof(Message).Assembly, "IoT.DeviceListener");

            services.AddSingleton(configuration);
            var sessionConfiguration = new SessionAndConfigurationHolder(configuration);

            services.AddSingleton(sessionConfiguration);

            configuration.UseContainer <ServicesBuilder>(customizations =>
            {
                customizations.ExistingServices(services);
                customizations.ServiceProviderFactory(sc =>
                {
                    container = new UpdateableServiceProvider(sc);
                    return(container);
                });
            });

            //container.AddHostedService<NServiceBusHost>();
            var endpointInstanse = Endpoint.Start(configuration).GetAwaiter().GetResult();

            sessionConfiguration.MessageSession = endpointInstanse;

            container.AddSingleton(provider =>
            {
                var management = provider.GetService <SessionAndConfigurationHolder>();

                if (management.MessageSession != null)
                {
                    return(management.MessageSession);
                }

                var timeout = TimeSpan.FromSeconds(30);

                if (!SpinWait.SpinUntil(() => management.MessageSession != null || management.StartupException != null,
                                        timeout))
                {
                    throw new TimeoutException($"Unable to resolve the message session within '{timeout.ToString()}'. If you are trying to resolve the session within hosted services it is encouraged to use `Lazy<IMessageSession>` instead of `IMessageSession` directly");
                }

                management.StartupException?.Throw();

                return(management.MessageSession);
            });
            container.AddSingleton(provider => new Lazy <IMessageSession>(provider.GetService <IMessageSession>));

            return(container);
        }
コード例 #18
0
 public void ConfigureContainer(UpdateableServiceProvider serviceProvider)
 {
     serviceProvider.StartNServiceBus(_configuration);
 }
        public static EndpointConfiguration UseServicesBuilder(this EndpointConfiguration config, UpdateableServiceProvider serviceProvider)
        {
            config.UseContainer <ServicesBuilder>(c => c.ServiceProviderFactory(s => serviceProvider));

            return(config);
        }