Sidio.Functions.Worker.ServiceBus
1.1.3
Prefix Reserved
See the version list below for details.
dotnet add package Sidio.Functions.Worker.ServiceBus --version 1.1.3
NuGet\Install-Package Sidio.Functions.Worker.ServiceBus -Version 1.1.3
<PackageReference Include="Sidio.Functions.Worker.ServiceBus" Version="1.1.3" />
paket add Sidio.Functions.Worker.ServiceBus --version 1.1.3
#r "nuget: Sidio.Functions.Worker.ServiceBus, 1.1.3"
// Install Sidio.Functions.Worker.ServiceBus as a Cake Addin #addin nuget:?package=Sidio.Functions.Worker.ServiceBus&version=1.1.3 // Install Sidio.Functions.Worker.ServiceBus as a Cake Tool #tool nuget:?package=Sidio.Functions.Worker.ServiceBus&version=1.1.3
Sidio.Functions.Worker.ServiceBus
A collection of useful service bus features for .NET isolated middleware.
Installation
Add the NuGet package to your project.
Middleware
Middleware template
The abstract class ServiceBusMiddlewareBase
supports the following methods:
BeforeInvocationAsync
: executed before the invocation of theFunctionExecutionDelegate
.AfterInvocationAsync
: executed after the invocation of theFunctionExecutionDelegate
, unless an exception is thrown.AlwaysAfterInvocation
: executed after the invocation of theFunctionExecutionDelegate
, regardless of an exception being thrown.OnExceptionAsync
: executed when an exception is thrown during the invocation of theFunctionExecutionDelegate
. Returntrue
when the exception is handled,false
when the exception should be rethrown.
ExceptionInsightMiddleware
The ExceptionInsightMiddleware
adds exception details to a dead-lettered message:
- Dead letter reason
- Exception message
Please note: it is currently not possible to read the maximum delivery count setting of a queue or topic. Therefore, you have to configure the ExceptionInsightMiddlewareOptions
manually
and ensure the maximum delivery count is set to a value equal or less than the service bus setting.
Usage
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults(
workerApplication =>
{
workerApplication.UseExceptionInsightMiddleware();
})
// ...
ScheduledRetryMiddleware
Usage
The ScheduledRetryMiddleware
is an extension of the ExceptionInsightMiddleware
, you should not register both middleware.
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults(
workerApplication =>
{
workerApplication.UseScheduledRetryMiddleware();
})
// ...
Configuration
- MaxDeliveryCount: the maximum number of delivery attempts before a message is dead-lettered.
- BackoffMode: the backoff mode to use for rescheduling messages.
- BackoffInSeconds: the number of seconds to wait before rescheduling a message.
Service Bus client provider
It's possible to use a custom IServiceBusClientProvider
to provide a ServiceBusClient
for sending messages:
services.AddScoped<IServiceBusClientProvider, MyServiceBusClientProvider>();
Manual dead-letter resubmission
When you want to resubmit a dead-lettered message manually, make sure the ScheduledRetryMiddleware.DeliveryAttempts
property is removed.
Extensions
FunctionContext extensions
GetServiceBusTrigger
Gets the ServiceBusTriggerAttribute
from the function context:
var attribute = functionContext.GetServiceBusTrigger();
IsServiceBusTrigger
Determines whether the function is a service bus trigger. Can be used when registering middleware:
functionsWorkerApplicationBuilder.UseWhen<MySerivceBusMiddleware>(context => context.IsServiceBusTrigger());
Known issues
- The
ExceptionInsightMiddleware
andScheduledRetryMiddleware
only support a trigger with aServiceBusRecievedMessage
binding. A trigger-binding to astring
is not supported.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- Microsoft.Azure.Functions.Worker.Core (>= 1.18.0)
- Microsoft.Azure.Functions.Worker.Extensions.ServiceBus (>= 5.20.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.