This article is part of the NServiceBus Learning Path.
This is an example of how an NServiceBus endpoint can be hosted using Azure WebJobs. This sample is compatible with Azure WebJobs SDK 3.0.
Running in development mode
- Start the Azurite Storage Emulator.
- Run the solution.
Code walk-through
This sample contains one project:
- Receiver: A self-hosted endpoint running in a continuous WebJob.
Receiver
The receiver uses the self-hosting capability to start an endpoint inside a WebJob.
The UseNServiceBus
method of NServiceBus.
is used to configure and start the endpoint:
hostBuilder.UseNServiceBus(ctx =>
{
var endpointConfiguration = new EndpointConfiguration("receiver");
endpointConfiguration.DefineCriticalErrorAction(OnCriticalError);
endpointConfiguration.UsePersistence<NonDurablePersistence>();
endpointConfiguration.UseSerialization<SystemJsonSerializer>();
endpointConfiguration.EnableInstallers();
var transportConnectionString = ctx.Configuration.GetConnectionString("TransportConnectionString");
endpointConfiguration.UseTransport(new AzureStorageQueueTransport(transportConnectionString));
return endpointConfiguration;
});
If dependencies need to be shared between the service collection and NServiceBus infrastructure (e.g., message handlers), refer to the ASP.NET Core sample.
A critical error action must be defined to restart the host when a critical error occurs:
static async Task OnCriticalError(ICriticalErrorContext context, CancellationToken cancellationToken)
{
var fatalMessage =
$"The following critical error was encountered:{Environment.NewLine}{context.Error}{Environment.NewLine}Process is shutting down. StackTrace: {Environment.NewLine}{context.Exception.StackTrace}";
try
{
await context.Stop(cancellationToken);
}
finally
{
Environment.FailFast(fatalMessage, context.Exception);
}
}
When the WebJob host stops, the endpoint is automatically stopped with it by the hosting extension.