StaticUsage(ServiceBusTriggeredEndpointConfiguration serviceBusTriggeredEndpointConfiguration, FunctionExecutionContext executionContext)
    {
        #region asb-enable-diagnostics

        serviceBusTriggeredEndpointConfiguration.LogDiagnostics();

        #endregion
    }
Exemple #2
0
 public override void Configure(IFunctionsHostBuilder builder)
 {
     builder.UseNServiceBus(() => {
         var configuration = new ServiceBusTriggeredEndpointConfiguration("MyFunctionsEndpoint");
         configuration.LogDiagnostics();
         return(configuration);
     });
 }
    public static void EnableDelayedRetries(ServiceBusTriggeredEndpointConfiguration serviceBusTriggeredEndpointConfiguration)
    {
        #region asb-configure-error-queue

        serviceBusTriggeredEndpointConfiguration.AdvancedConfiguration.SendFailedMessagesTo("error");

        #endregion
    }
Exemple #4
0
 public override void Configure(IFunctionsHostBuilder builder)
 {
     builder.UseNServiceBus(() => {
         var configuration = new ServiceBusTriggeredEndpointConfiguration("MyFunctionsEndpoint");
         configuration.AdvancedConfiguration.SendFailedMessagesTo("error");
         return(configuration);
     });
 }
Exemple #5
0
        public static ServiceBusTriggeredEndpointConfiguration BuildEndpointConfiguration(IFunctionsHostBuilder builder, IConfiguration configuration)
        {
            var endpointConfiguration = new ServiceBusTriggeredEndpointConfiguration(configuration["NServiceBus:EndpointName"]);

            endpointConfiguration.LogDiagnostics();
            var e = endpointConfiguration.AdvancedConfiguration;

            var serialization = e.UseSerialization <NewtonsoftSerializer>();

            // Newtonsoft serializer doesn't properly deserialize properties with protected setter,
            // the following serializer settings will be applied by NServiceBus during all messages's deserializations
            serialization.Settings(EventSerialization.Settings);

            e.Conventions().DefiningEventsAs(t => t.Namespace != null && t.Namespace.EndsWith("Events"));

            e.AuditProcessedMessagesTo(configuration["NServiceBus:AuditQueue"]);
            e.SendFailedMessagesTo(configuration["NServiceBus:ErrorQueue"]);
            //e.SendHeartbeatTo(serviceControlQueue: configuration["NServiceBus:ServiceControlInstance"],
            //    frequency: TimeSpan.FromSeconds(15),
            //    timeToLive: TimeSpan.FromSeconds(30));

            //var endpointName = configuration["NServiceBus:EndpointName"];
            //var machineName = $"{Dns.GetHostName()}.{IPGlobalProperties.GetIPGlobalProperties().DomainName}";
            //var instanceIdentifier = $"{endpointName}@{machineName}";

            //var metrics = e.EnableMetrics();
            //metrics.SendMetricDataToServiceControl(serviceControlMetricsAddress: configuration["NServiceBus:ServiceControlMonitoringInstance"],
            //    interval: TimeSpan.FromSeconds(10),
            //    instanceId: instanceIdentifier);

            //This instruction checks every time the application starts up in order to create
            //all the necessary NServiceBus objects in the database automatically
            var settings = e.GetSettings();

            settings.Set("SqlPersistence.ScriptDirectory", builder.GetContext().ApplicationRootPath);
            e.EnableInstallers();

            return(endpointConfiguration);
        }
Exemple #6
0
        public async Task Should_load_handlers_from_assembly_when_using_FunctionsHostBuilder()
        {
            // The message handler assembly shouldn't be loaded at this point because there is no reference in the code to it.
            Assert.False(AppDomain.CurrentDomain.GetAssemblies().Any(a => a.FullName == "Testing.Handlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"));

            var serviceCollection = new ServiceCollection();

            var configuration = new ServiceBusTriggeredEndpointConfiguration("assemblyTest");

            configuration.UseSerialization <XmlSerializer>();
            configuration.EndpointConfiguration.UsePersistence <LearningPersistence>();

            var settings = configuration.AdvancedConfiguration.GetSettings();

            var endpointFactory = FunctionsHostBuilderExtensions.Configure(configuration, serviceCollection,
                                                                           Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ExternalHandlers"));

            var serviceProvider = serviceCollection.BuildServiceProvider();
            var endpoint        = endpointFactory(serviceProvider);


            // we need to process an actual message to have the endpoint being created
            await endpoint.Process(GenerateMessage(), new ExecutionContext());

            // The message handler assembly should be loaded now because scanning should find and load the handler assembly
            Assert.True(AppDomain.CurrentDomain.GetAssemblies().Any(a => a.FullName == "Testing.Handlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"));

            // Verify the handler and message type have been identified and loaded:
            var registry         = settings.Get <MessageHandlerRegistry>();
            var dummyMessageType = registry.GetMessageTypes().FirstOrDefault(t => t.FullName == "Testing.Handlers.DummyMessage");

            Assert.NotNull(dummyMessageType);
            var dummyMessageHandler = registry.GetHandlersFor(dummyMessageType).SingleOrDefault();

            Assert.AreEqual("Testing.Handlers.DummyMessageHandler", dummyMessageHandler.HandlerType.FullName);

            // ensure the assembly is loaded into the right context
            Assert.AreEqual(AssemblyLoadContext.GetLoadContext(Assembly.GetExecutingAssembly()), AssemblyLoadContext.GetLoadContext(dummyMessageType.Assembly));
        }
Exemple #7
0
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var context = builder.GetContext();

            builder.UseNServiceBus(() =>
            {
                string endpointPostfix = "";

                // Workaround for unstable EnvironmentName in Azure
                // (see https://github.com/Azure/azure-functions-host/issues/6239)
                var environmentName = context.Configuration.GetValue <string>("DOTNET_ENVIRONMENT") ??
                                      Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT") ??
                                      Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ??
                                      context.EnvironmentName;

                if (environmentName == "Development")
                {
                    endpointPostfix += $".{Environment.MachineName}";
                }

                string endpointName = $"FplBot.Functions.{environmentName}{endpointPostfix}";
                var configuration   = new ServiceBusTriggeredEndpointConfiguration(endpointName, "ASB_CONNECTIONSTRING");
                Console.WriteLine($"ENDPOINTNAME: {endpointName}");
                configuration.Transport.SubscriptionRuleNamingConvention(t =>
                {
                    return(Shorten(t.ToString()));

                    static string Shorten(string current)
                    {
                        if (current.Length <= 50)
                        {
                            return(current);
                        }

                        var strings = current.Split('.');
                        if (strings.Length == 1)
                        {
                            return(current.Length > 48 ? $"Z.{current[^48..]}" : $"Z.{current}");
Exemple #8
0
    public override void Configure(IFunctionsHostBuilder builder)
    {
        var services = builder.Services;

        // register custom service in the container
        services.AddSingleton(_ =>
        {
            var configurationRoot = builder.GetContext().Configuration;
            var customComponentInitializationValue = configurationRoot.GetValue <string>("CustomComponentValue");

            return(new CustomComponent(customComponentInitializationValue));
        });

        builder.UseNServiceBus(() =>
        {
            var configuration = new ServiceBusTriggeredEndpointConfiguration(Startup.EndpointName);

            // optional: log startup diagnostics using Functions provided logger
            configuration.LogDiagnostics();

            return(configuration);
        });
    }
    public override void Configure(IFunctionsHostBuilder builder)
    {
        var services = builder.Services;

        services.AddScoped(typeof(MyService));
        services.AddScoped <IMyService>(sp => sp.GetRequiredService <MyService>());

        services.AddDbContext <MyDbContext>(options =>
        {
            var connectionString = builder.GetContext().Configuration.GetConnectionString("MyDbConnectionString");
            options.UseSqlServer(connectionString);
        });

        services.AddSingleton(sp => new FunctionEndpoint(executionContext =>
        {
            var configuration = ServiceBusTriggeredEndpointConfiguration.FromAttributes();

            configuration.UseSerialization <NewtonsoftSerializer>();

            // configuration.LogDiagnostics();

            var containerSettings = configuration.AdvancedConfiguration.UseContainer(new DefaultServiceProviderFactory());
            // var serviceCollection = containerSettings.ServiceCollection;
            containerSettings.ServiceCollection.Add(services);

            // serviceCollection.AddDbContext<MyDbContext>(delegate (DbContextOptionsBuilder options)
            // {
            //     var connectionString = builder.GetContext().Configuration.GetConnectionString("MyDbConnectionString");
            //     options.UseSqlServer(connectionString);
            // });
            //
            // serviceCollection.AddScoped(typeof(MyService));
            // serviceCollection.AddScoped<IMyService>(provider => provider.GetRequiredService<MyService>());

            return(configuration);
        }));
    }
Exemple #10
0
            public override Task Start(CancellationToken token)
            {
                endpoint = new TestableFunctionEndpoint(context =>
                {
                    var functionEndpointConfiguration = new ServiceBusTriggeredEndpointConfiguration(Name);

                    var endpointConfiguration = functionEndpointConfiguration.AdvancedConfiguration;

                    endpointConfiguration.TypesToIncludeInScan(functionComponentType.GetTypesScopedByTestClass());

                    endpointConfiguration.Recoverability()
                    .Immediate(i => i.NumberOfRetries(0))
                    .Delayed(d => d.NumberOfRetries(0))
                    .Failed(c => c
                            // track messages sent to the error queue to fail the test
                            .OnMessageSentToErrorQueue(failedMessage =>
                    {
                        scenarioContext.FailedMessages.AddOrUpdate(
                            Name,
                            new[] { failedMessage },
                            (_, fm) =>
                        {
                            var messages = fm.ToList();
                            messages.Add(failedMessage);
                            return(messages);
                        });
                        return(Task.CompletedTask);
                    }));

                    endpointConfiguration.RegisterComponents(c => c.RegisterSingleton(scenarioContext.GetType(), scenarioContext));

                    configurationCustomization(functionEndpointConfiguration);
                    return(functionEndpointConfiguration);
                });

                return(Task.CompletedTask);
            }
Exemple #11
0
    public override void Configure(IFunctionsHostBuilder builder)
    {
        var services = builder.Services;

        var configurationRoot = builder.GetContext().Configuration;

        services.AddSingleton <IConfiguration>(configurationRoot);

        services.AddDbContext <MyDbContext>(options =>
        {
            var connectionString = configurationRoot.GetConnectionString("MyDbConnectionString");
            options.UseSqlServer(connectionString);
            options.EnableServiceProviderCaching(false);
        });

        builder.UseNServiceBus(() =>
        {
            //TODO FromAttributes does not work as the function declaration is not in the stack when this method is called.
            //var configuration = ServiceBusTriggeredEndpointConfiguration.FromAttributes();

            var configuration = new ServiceBusTriggeredEndpointConfiguration(AzureServiceBusTriggerFunction.EndpointName, "AzureWebJobsServiceBus");
            return(configuration);
        });
    }