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 bus implements IDisposable and should be shut down when the process is shut down.

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