CodeDesignPlus.Net.ServiceBus.Abstractions 1.0.0-beta.13054

This is a prerelease version of CodeDesignPlus.Net.ServiceBus.Abstractions.
dotnet add package CodeDesignPlus.Net.ServiceBus.Abstractions --version 1.0.0-beta.13054
                    
NuGet\Install-Package CodeDesignPlus.Net.ServiceBus.Abstractions -Version 1.0.0-beta.13054
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CodeDesignPlus.Net.ServiceBus.Abstractions" Version="1.0.0-beta.13054" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CodeDesignPlus.Net.ServiceBus.Abstractions" Version="1.0.0-beta.13054" />
                    
Directory.Packages.props
<PackageReference Include="CodeDesignPlus.Net.ServiceBus.Abstractions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CodeDesignPlus.Net.ServiceBus.Abstractions --version 1.0.0-beta.13054
                    
#r "nuget: CodeDesignPlus.Net.ServiceBus.Abstractions, 1.0.0-beta.13054"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CodeDesignPlus.Net.ServiceBus.Abstractions@1.0.0-beta.13054
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CodeDesignPlus.Net.ServiceBus.Abstractions&version=1.0.0-beta.13054&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=CodeDesignPlus.Net.ServiceBus.Abstractions&version=1.0.0-beta.13054&prerelease
                    
Install as a Cake Tool

CodeDesignPlus.Net.ServiceBus

Quality Gate Status Bugs Code Smells Coverage Duplicated Lines (%) Vulnerabilities

Description

CodeDesignPlus.Net.ServiceBus implementa el contrato de publicación y suscripción del SDK sobre Azure Service Bus. Es un transporte alternativo a CodeDesignPlus.Net.RabbitMQ: los handlers, los eventos de dominio y los atributos EventKey y QueueName no cambian, solo cambia por dónde viajan los mensajes.

Tabla de contenido

Sobre el proyecto

La librería implementa IMessage de CodeDesignPlus.Net.PubSub. Todo lo que rodea al transporte —el descubrimiento de handlers, los servicios en segundo plano que abren las suscripciones, el seguimiento de cuáles están listas y la cola en memoria opcional— lo sigue aportando CodeDesignPlus.Net.PubSub sin cambios.

Cómo se traduce el modelo de RabbitMQ

RabbitMQ Azure Service Bus
Exchange fanout por tipo de evento Topic, con el mismo nombre derivado de EventKey
Una cola por handler, enlazada al exchange Una suscripción por handler
Exchange y cola .dlx declarados a mano DLQ nativa, <topic>/Subscriptions/<sub>/$DeadLetterQueue
x-delivery-limit MaxDeliveryCount
x-message-ttl DefaultMessageTimeToLive
BasicAck / BasicNack CompleteMessageAsync / AbandonMessageAsync / DeadLetterMessageAsync
Cabecera x-delivery-count ServiceBusReceivedMessage.DeliveryCount

El nombre del topic es el mismo que el del exchange, así que el inventario de eventos no cambia. El nombre de la suscripción sí: Azure lo limita a 50 caracteres y casi todos los nombres de cola actuales los superan. La librería lo resuelve sola, sin tocar los [QueueName]:

subscription = "{appName}.{action}"                  si cabe en 50
             = prefijo[41] + "-" + sha256(logico)[8] si no cabe

El resumen se calcula sobre el nombre lógico completo (negocio, versión y entidad incluidos), de modo que dos handlers cuyo prefijo coincide tras el recorte siguen resolviendo a suscripciones distintas.

Instalación

dotnet add package CodeDesignPlus.Net.ServiceBus

Uso

builder.Services.AddServiceBus<Program>(builder.Configuration);
{
  "Core": { "AppName": "ms-invoicing", "Business": "kappali", "Version": "v1" },
  "ServiceBus": {
    "Enable": true,
    "FullyQualifiedNamespace": "sb-kappali-stg.servicebus.windows.net",
    "UseQueue": false,
    "EnableDiagnostic": true
  }
}
Opción Valor por defecto Para qué sirve
Enable false Con false no se registra nada y no se abre conexión
FullyQualifiedNamespace Namespace, cuando se autentica con Entra ID
ConnectionString null Alternativa a lo anterior; tiene prioridad si se define
ManagementConnectionString null Solo para el emulador, que separa el plano de gestión
AutoProvisionEntities true Crear topics y suscripciones al vuelo
MaxRetry 10 Reintentos antes de mandar el mensaje a la DLQ
RetryIntervalMs / MaxRetryIntervalMs 2000 / 60000 Base y techo del backoff exponencial
MaxConcurrentCalls 4 Mensajes procesados a la vez por suscripción
PrefetchCount 0 Sin prelectura: la espera del backoff retiene el bloqueo
LockDurationSeconds 300 Bloqueo del mensaje, máximo que admite Service Bus
MaxAutoLockRenewalMinutes 10 Debe superar a MaxRetryIntervalMs; se valida
MessageTimeToLiveHours 48 Caducidad del mensaje en la suscripción
RegisterHealthCheck true Registra los chequeos con etiqueta ready

Autenticación

Por defecto se usa DefaultAzureCredential contra FullyQualifiedNamespace, lo que en AKS se traduce en Workload Identity. La identidad necesita el rol Azure Service Bus Data Owner, porque AutoProvisionEntities crea entidades; con las entidades ya creadas y AutoProvisionEntities en false bastan Data Sender y Data Receiver.

ConnectionString existe para el desarrollo local y el emulador, que no admiten Entra ID.

Reintentos y dead-letter

error de negocio (CodeDesignPlusException)  ->  DLQ inmediata, motivo "BusinessError"
error de infraestructura, quedan reintentos ->  espera creciente y AbandonMessageAsync
error de infraestructura, agotados          ->  DLQ, motivo "MaxRetriesExceeded"

La espera crece de forma exponencial desde RetryIntervalMs hasta MaxRetryIntervalMs, con una dispersión de hasta el 20% para que varias réplicas que fallaron a la vez no reintenten a la vez. Transcurre en proceso, con el bloqueo del mensaje retenido y renovándose solo. La alternativa —completar el mensaje y reprogramar una copia— libera el bloqueo antes, pero completar y reprogramar no son operaciones atómicas y una caída entre ambas pierde el evento.

La suscripción se crea con MaxDeliveryCount = MaxRetry + 1: decide primero el consumidor, que es quien sabe distinguir un error de negocio, y el broker queda como red de seguridad para el caso de que el proceso muera antes de decidir.

Pruebas

Las pruebas de integración usan el emulador oficial (mcr.microsoft.com/azure-messaging/servicebus-emulator más su SQL Server), levantado por ServiceBusCollectionFixture de CodeDesignPlus.Net.xUnit.

El emulador impone topes que Azure no tiene y que obligan a bajar los valores de producción en las pruebas:

Emulador Azure
MaxDeliveryCount 1 a 10 hasta 2.147.483.647
DefaultMessageTimeToLive 1 s a 1 h hasta TimeSpan.MaxValue
UserMetadata de un topic se descarta se conserva
Plano de gestión puerto aparte (5300) mismo extremo

Límites que conviene conocer

  • 256 KB por mensaje en el nivel Standard, propiedades incluidas. La librería comprueba el tamaño antes de enviar y lanza un ServiceBusPubSubException que nombra el evento y su tamaño.
  • 1.000 operaciones por segundo por namespace en Standard.
  • Un mensaje publicado en un topic con N suscripciones son N entregas facturables.
  • 10.000 topics por namespace y 2.000 suscripciones por topic.

Contributing

Please read CONTRIBUTING for details on our code of conduct, and the process for submitting pull requests to us.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contact

CodeDesignPlus - @CodeDesignPlus - custom.software@codedesignplus.com

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on CodeDesignPlus.Net.ServiceBus.Abstractions:

Package Downloads
CodeDesignPlus.Net.ServiceBus

CodeDesignPlus.Net.ServiceBus provides a robust framework for integrating Azure Service Bus with .NET Core applications. This library simplifies the process of producing and consuming domain events over topics and subscriptions, with exponential backoff, native dead-lettering and Entra ID authentication, enabling developers to build scalable and reliable event-driven systems.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0-beta.13054 146 9/19/2026