NServiceBus.AzureFunctions.InProcess.ServiceBus component has been sunset
Microsoft announced that .NET 8 will be the last release supporting the in-process hosting model. We will continue to provide support and address critical fixes during the sunset period, but no new features will be added. New projects should use the isolated worker model instead. Follow these instructions to migrate. For information on the date when this component will stop receiving any update check our support policy page.
To configure a custom trigger function, remove the native NServiceBusTriggerFunction attribute. A custom trigger function can then be added manually to the project:
class CustomTriggerDefinition(IFunctionEndpoint functionEndpoint)
{
[FunctionName("MyCustomTrigger")]
public Task Run(
[ServiceBusTrigger("MyFunctionsEndpoint")]
ServiceBusReceivedMessage message,
ServiceBusClient client,
ServiceBusMessageActions messageActions,
ILogger logger,
ExecutionContext executionContext)
{
return functionEndpoint.ProcessAtomic(message, executionContext, client, messageActions, logger);
}
}
Configuring transaction mode
To use the TransportTransactionMode. mode, AutoCompleteMessages needs to be disabled and the custom trigger needs to call ProcessAtomic.
[FunctionName("ProcessMessageTx")]
public Task RunTx(
// Setting AutoComplete to false processes the message transactionally
[ServiceBusTrigger("ProcessMessageTx", AutoCompleteMessages = false)]
ServiceBusReceivedMessage message,
ServiceBusClient client,
ServiceBusMessageActions messageActions,
ILogger logger,
ExecutionContext executionContext)
{
return endpoint.ProcessAtomic(message, executionContext, client, messageActions, logger);
}
To use the TransportTransactionMode. mode, AutoCompleteMessages needs to be enabled and the trigger needs to call ProcessNonAtomic.
[FunctionName("ProcessMessage")]
public async Task Run(
// Setting AutoComplete to true (the default) processes the message non-transactionally
[ServiceBusTrigger("ProcessMessage", AutoCompleteMessages = true)]
ServiceBusReceivedMessage message,
ILogger logger,
ExecutionContext executionContext)
{
await endpoint.ProcessNonAtomic(message, executionContext, logger);
}
Incorrectly configuring the service bus trigger AutoCompleteMessages setting can lead to message loss. Use the auto-detection mechanism on the function endpoint interface, or use the trigger function attribute to specify message consistency.