Endpoint configuration choices

Component: NServiceBus
NuGet Package NServiceBus (7.x)
This sample uses the same approach as the NServiceBus as a Windows Service sample 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 example of this approach. See also Hosting options.

Configure 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();

var executingAssembly = Assembly.GetExecutingAssembly();
var repository = log4net.LogManager.GetRepository(executingAssembly);
BasicConfigurator.Configure(repository, appender);

LogManager.Use<Log4NetFactory>();

Create the root configuration instance

The following code will create the configuration instance and define the endpoint name.

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

Select and configure dependency injection

This sample uses Autofac with a customized instance 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 endpoint should be stopped 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.
  • Hosting
    Outlines the various approaches to endpoint hosting.

Last modified