Search code examples
c#azureservicebusazure-servicebus-queuesrebus

Why is my Rebus handler being called multiple times for a single Azure Service Bus message?


I'm using Rebus to send a message to an Azure Service Bus queue. For each message, my consumer's handler method seems to get called multiple times. Received. is written to 9 separate log files.

Producer:

await _bus.Advanced.Routing.Send("some-queue", new SomeMessage());

Consumer:

public class SomeMessageHandler : IHandleMessages<SomeMessage>
{
    public async Task Handle(SomeMessage message)
    {
        _logger.Information("Received.");

        await SomeApiCall();
    }
}

Consumer configuration:

builder.RegisterRebus((configurer, context) => configurer
    .Logging(l => l.Serilog())
    .Transport(t => t.UseAzureServiceBus("Endpoint=<redcated>;SharedAccessKeyName=<redacted>;SharedAccessKey=<redacted>", "some-queue")));

Solution

  • The method was throwing an unhandled exception. Rebus was trying to re-process it since it was erroring out.

    Adding exception handling allowed the method to finish. Now the handler is only called one time as expected.