Getting Started
Architecture
Transports
Persistence
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Samples

Custom Azure Functions triggers

If the trigger function must be customized, disable generation of the trigger function by removing the NServiceBusTriggerFunction attribute. A custom trigger function can then be added manually to the project:

class CustomTriggerDefinition
{
    IFunctionEndpoint functionEndpoint;

    public CustomTriggerDefinition(IFunctionEndpoint functionEndpoint)
    {
        this.functionEndpoint = functionEndpoint;
    }

    [FunctionName("MyCustomTrigger")]
    public async Task Run(
        [ServiceBusTrigger("MyFunctionsEndpoint")]
        Message message,
        ILogger logger,
        MessageReceiver messageReceiver,
        ExecutionContext executionContext)
    {
        await functionEndpoint.Process(message, executionContext, messageReceiver, logger);
    }
}

Configuring transaction mode

To use the TransportTransactionMode.SendsAtomicWithReceive mode the auto-complete needs to be disabled and the trigger needs to call ProcessAtomic.

[FunctionName("ProcessMessageTx")]
public async Task RunTx(
    // Setting AutoComplete to false processes the message transactionally
    [ServiceBusTrigger("ProcessMessageTx", AutoComplete = false)]
    Message message,
    ILogger logger,
    MessageReceiver messageReceiver,
    ExecutionContext executionContext)
{
    await endpoint.Process(message, executionContext, messageReceiver, logger);
}

To use the TransportTransactionMode.ReceiveOnly mode the auto-complete 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", AutoComplete = true)]
    Message message,
    ILogger logger,
    MessageReceiver messageReceiver,
    ExecutionContext executionContext)
{
    await endpoint.Process(message, executionContext, messageReceiver, logger);
}

Related Articles