Endpoint configuration choices

Component: NServiceBus
NuGet Package NServiceBus (6.x)
This sample uses the same approach as the NServiceBus as a Windows Service for a streamlined Windows Service debugging experience.

Code walk-through

This sample walks through the most common choices required when creating a first endpoint. It will also show the configuration APIs needed to implement those choices.

Hosting

This sample uses a dual runnable console and Windows Service for hosting. More details on this approach can be seen in Windows Service Hosting, there is also a more detailed sample of this approach. See also Hosting options.

Configure an Recoverability

When a message fails processing it will be forwarded here.

endpointConfiguration.SendFailedMessagesTo("error");

Configure an Audit queue

All messages received by an endpoint will be forwarded to the audit queue.

endpointConfiguration.AuditProcessedMessagesTo("audit");

Select and configure Logging

In this sample Log4net is being used to route log events to the Console.

var layout = new PatternLayout
{
    ConversionPattern = "%d %-5p %c - %m%n"
};
layout.ActivateOptions();
var appender = new ConsoleAppender
{
    Layout = layout,
    Threshold = Level.Info
};
appender.ActivateOptions();

BasicConfigurator.Configure(appender);

LogManager.Use<Log4NetFactory>();

Create the root configuration instance

And also define the endpoint name.

In Versions 6 and above endpoint name is mandatory.
var endpointConfiguration = new EndpointConfiguration("Samples.FirstEndpoint");

Select and configure a Container

Autofac is being used with a customized container instance being passed into NServiceBus.

var builder = new ContainerBuilder();
// configure custom services
// builder.RegisterInstance(new MyService());
var container = builder.Build();
endpointConfiguration.UseContainer<AutofacBuilder>(
    customizations: customizations =>
    {
        customizations.ExistingLifetimeScope(container);
    });

Select and configure Serialization

This sample uses the XML serializer.

endpointConfiguration.UseSerialization<XmlSerializer>();

Select and configure a Transport

This sample uses the Learning transport.

endpointConfiguration.UseTransport<LearningTransport>();

Select and configure Persistence

This sample uses the Learning persistence.

endpointConfiguration.UsePersistence<LearningPersistence>();

Start the Endpoint

Enable installers and start the endpoint.

endpointConfiguration.EnableInstallers();
endpointInstance = await Endpoint.Start(endpointConfiguration)
    .ConfigureAwait(false);

Shut down the Endpoint

The bus implements IDisposable and should be shut down when the process is shut down.

endpointInstance?.Stop().GetAwaiter().GetResult();

Handling Critical Errors

Since this sample is configured to run as a windows service, the action defined when a critical error occurs is to shut down the process.

endpointConfiguration.DefineCriticalErrorAction(
    onCriticalError: async context =>
    {
        // Log the critical error
        log.Fatal($"CRITICAL: {context.Error}", context.Exception);

        await context.Stop()
            .ConfigureAwait(false);

        // Kill the process on a critical error
        var output = $"NServiceBus critical error:\n{context.Error}\nShutting down.";
        Environment.FailFast(output, context.Exception);
    });

Samples

Related Articles

  • Assembly scanning
    To enable automatic detection of various features NServiceBus scans assemblies for well known types.

Last modified