Getting Started
Architecture
Transports
Persistence
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Modernization
Samples

Custom Azure Functions triggers

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.SendsAtomicWithReceive 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.ReceiveOnly 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);
}

Related Articles