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.