Handle Failures¶
Subscriber failures can happen during deserialization, handler execution or acknowledgement.
ServiceBus.Core exposes hooks that allow applications to observe and react to failures.
Processing Handler¶
subscriber.Received.Add(
async (sender, args) =>
{
try
{
var message = args.Message.Data;
Console.WriteLine(
$"processing order: {message.OrderId}");
args.Acknowledged = true;
args.Requeue = false;
}
catch
{
args.Acknowledged = false;
args.Requeue = true;
throw;
}
await Task.CompletedTask;
});
Exception Event¶
subscriber.OnException.Add(
async (sender, args) =>
{
Console.WriteLine(
$"subscriber exception: {args.Exception.Message}");
await Task.CompletedTask;
});
Max Retry Event¶
subscriber.OnMaxRetryFailed.Add(
async (sender, args) =>
{
Console.WriteLine(
$"max retry failed: {args.Exception.Message}");
await Task.CompletedTask;
});
Failure Flow¶
graph TD
Message --> Handler
Handler --> Success
Handler --> Failure
Failure --> Retry
Retry --> Handler
Failure --> ErrorHandling
Acknowledgement Strategy¶
| Scenario | Acknowledged | Requeue |
|---|---|---|
| Message processed successfully | true |
false |
| Temporary failure | false |
true |
| Invalid message | false |
false |
Guidance¶
Keep failure handlers focused on observability and recovery.
Avoid placing complex business logic inside failure events.