Nuuvify.CommonPack.AzureServiceBus.Abstraction
2.1.0-test.25101102
See the version list below for details.
dotnet add package Nuuvify.CommonPack.AzureServiceBus.Abstraction --version 2.1.0-test.25101102
NuGet\Install-Package Nuuvify.CommonPack.AzureServiceBus.Abstraction -Version 2.1.0-test.25101102
<PackageReference Include="Nuuvify.CommonPack.AzureServiceBus.Abstraction" Version="2.1.0-test.25101102" />
<PackageVersion Include="Nuuvify.CommonPack.AzureServiceBus.Abstraction" Version="2.1.0-test.25101102" />
<PackageReference Include="Nuuvify.CommonPack.AzureServiceBus.Abstraction" />
paket add Nuuvify.CommonPack.AzureServiceBus.Abstraction --version 2.1.0-test.25101102
#r "nuget: Nuuvify.CommonPack.AzureServiceBus.Abstraction, 2.1.0-test.25101102"
#:package Nuuvify.CommonPack.AzureServiceBus.Abstraction@2.1.0-test.25101102
#addin nuget:?package=Nuuvify.CommonPack.AzureServiceBus.Abstraction&version=2.1.0-test.25101102&prerelease
#tool nuget:?package=Nuuvify.CommonPack.AzureServiceBus.Abstraction&version=2.1.0-test.25101102&prerelease
Nuuvify.CommonPack.AzureServiceBus.Abstraction
Pacote de abstrações para integração com Azure Service Bus. Este pacote contém todas as interfaces, modelos e configurações necessárias para trabalhar com Azure Service Bus de forma desacoplada.
📋 Conteúdo do Pacote
Este pacote de abstrações inclui:
- Interfaces: Contratos para operações com Service Bus
- Modelos: Classes de configuração e opções de mensagens
- Configurações: Classes de configuração tipadas
- Sem dependências externas: Apenas referências mínimas do .NET
🎯 Objetivo
O pacote de abstrações permite:
- Desacoplamento: Implementações podem referenciar apenas as abstrações
- Testabilidade: Facilita criação de mocks e testes unitários
- Flexibilidade: Permite múltiplas implementações da mesma interface
- Dependency Inversion: Segue o princípio SOLID de inversão de dependência
📦 Estrutura
Nuuvify.CommonPack.AzureServiceBus.Abstraction/
├── Configuration/
│ └── ServiceBusConfiguration.cs # Configurações do Service Bus
├── Interfaces/
│ └── IServiceBusMessageSender.cs # Interface principal para envio
├── Models/
│ └── ServiceBusMessageOptions.cs # Opções para mensagens
└── README.md # Este arquivo
🚀 Instalação
dotnet add package Nuuvify.CommonPack.AzureServiceBus.Abstraction
🛠️ Uso em Projetos
Para Implementações
Se você está implementando uma funcionalidade de Service Bus:
# Instale ambos os pacotes
dotnet add package Nuuvify.CommonPack.AzureServiceBus.Abstraction
dotnet add package Nuuvify.CommonPack.AzureServiceBus
Para Consumidores
Se você está consumindo funcionalidades de Service Bus:
# Instale apenas as abstrações
dotnet add package Nuuvify.CommonPack.AzureServiceBus.Abstraction
// Seu serviço depende apenas da abstração
public class OrderService
{
private readonly IServiceBusMessageSender _sender;
public OrderService(IServiceBusMessageSender sender)
{
_sender = sender; // ✅ Depende apenas da interface
}
public async Task ProcessOrder(Order order)
{
await _sender.SendMessageToQueueAsync("orders", order);
}
}
🔧 Configuração
ServiceBusConfiguration
Configuração completa para conexão com Azure Service Bus:
public class ServiceBusConfiguration
{
public string ConnectionString { get; set; } = string.Empty;
public string? DefaultQueueName { get; set; }
public string? DefaultTopicName { get; set; }
public int OperationTimeoutSeconds { get; set; } = 30;
public int MaxRetryAttempts { get; set; } = 3;
public int RetryDelaySeconds { get; set; } = 5;
public int MaxBatchSize { get; set; } = 100;
public bool EnableSessions { get; set; } = false;
public bool EnablePartitioning { get; set; } = false;
public int DefaultMessageTtlMinutes { get; set; } = 60;
// Métodos de validação
public bool IsValid() { /* ... */ }
public ReadOnlyCollection<string> ValidateConfiguration() { /* ... */ }
}
ServiceBusMessageOptions
Opções avançadas para personalização de mensagens:
public class ServiceBusMessageOptions
{
public string? MessageId { get; set; }
public string? CorrelationId { get; set; }
public string? SessionId { get; set; }
public TimeSpan? TimeToLive { get; set; }
public string? Subject { get; set; }
public string? ContentType { get; set; }
public string? ReplyTo { get; set; }
public string? ReplyToSessionId { get; set; }
public string? PartitionKey { get; set; }
public string? ViaPartitionKey { get; set; }
public DateTimeOffset? ScheduledEnqueueTime { get; set; }
public Dictionary<string, object> ApplicationProperties { get; set; }
}
📋 Interface Principal
IServiceBusMessageSender
Interface completa para operações com Azure Service Bus: Você não precisa implementar isso basta injetar esse interface em uma classe do seu projeto "Bus" e consumir os metodos abaixo
public interface IServiceBusMessageSender : IAsyncDisposable
{
// Envio para filas
Task SendMessageToQueueAsync<T>(string queueName, T message,
ServiceBusMessageOptions? options = null, CancellationToken cancellationToken = default);
// Envio para tópicos
Task SendMessageToTopicAsync<T>(string topicName, T message,
ServiceBusMessageOptions? options = null, CancellationToken cancellationToken = default);
// Operações em lote
Task SendBatchMessagesToQueueAsync<T>(string queueName, IEnumerable<T> messages,
ServiceBusMessageOptions? options = null, CancellationToken cancellationToken = default);
Task SendBatchMessagesToTopicAsync<T>(string topicName, IEnumerable<T> messages,
ServiceBusMessageOptions? options = null, CancellationToken cancellationToken = default);
// Mensagens agendadas
Task<long> ScheduleMessageToQueueAsync<T>(string queueName, T message, DateTimeOffset scheduledEnqueueTime,
ServiceBusMessageOptions? options = null, CancellationToken cancellationToken = default);
Task<long> ScheduleMessageToTopicAsync<T>(string topicName, T message, DateTimeOffset scheduledEnqueueTime,
ServiceBusMessageOptions? options = null, CancellationToken cancellationToken = default);
// Cancelamento de agendamento
Task CancelScheduledMessageInQueueAsync(string queueName, long sequenceNumber,
CancellationToken cancellationToken = default);
Task CancelScheduledMessageInTopicAsync(string topicName, long sequenceNumber,
CancellationToken cancellationToken = default);
}
🧪 Testabilidade
Mock para Testes Unitários
public class MockServiceBusMessageSender : IServiceBusMessageSender
{
public List<(string Queue, object Message)> SentMessages { get; } = new();
public Task SendMessageToQueueAsync<T>(string queueName, T message,
ServiceBusMessageOptions? options = null, CancellationToken cancellationToken = default)
{
SentMessages.Add((queueName, message!));
return Task.CompletedTask;
}
// Implementar outros métodos conforme necessário...
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
}
// Uso em testes
[Test]
public async Task ProcessOrder_ShouldSendMessage()
{
// Arrange
var mockSender = new MockServiceBusMessageSender();
var service = new OrderService(mockSender);
var order = new Order { Id = 1, Total = 100m };
// Act
await service.ProcessOrder(order);
// Assert
Assert.That(mockSender.SentMessages, Has.Count.EqualTo(1));
Assert.That(mockSender.SentMessages[0].Queue, Is.EqualTo("orders"));
}
Usando Moq
[Test]
public async Task ProcessOrder_ShouldSendMessage_UsingMoq()
{
// Arrange
var mockSender = new Mock<IServiceBusMessageSender>();
var service = new OrderService(mockSender.Object);
var order = new Order { Id = 1, Total = 100m };
// Act
await service.ProcessOrder(order);
// Assert
mockSender.Verify(x => x.SendMessageToQueueAsync(
"orders",
order,
It.IsAny<ServiceBusMessageOptions>(),
It.IsAny<CancellationToken>()),
Times.Once);
}
🏗️ Arquitetura de Dependências
Camadas da Aplicação
┌─────────────────────────────────────────┐
│ Application Layer │
│ (Controllers, Services, Handlers) │
│ │ │
│ depends on │ │
│ ▼ │
├─────────────────────────────────────────┤
│ Abstraction Layer │
│ (Interfaces, Models, Configuration) │ ◀── Este pacote
│ ▲ │
│ implements │ │
│ │ │
├─────────────────────────────────────────┤
│ Implementation Layer │
│ (ServiceBusMessageSender, etc) │
│ │ │
│ depends on │ │
│ ▼ │
├─────────────────────────────────────────┤
│ Infrastructure Layer │
│ (Azure.Messaging.ServiceBus, etc) │
└─────────────────────────────────────────┘
Benefícios desta Arquitetura
- Dependency Inversion: Aplicação depende de abstrações, não de implementações
- Flexibilidade: Pode trocar implementações sem alterar código da aplicação
- Testabilidade: Facilita criação de mocks e testes isolados
- Deploy Independente: Abstrações podem ser versionadas independentemente
📊 Dependências
Este pacote mantém as dependências essenciais para abstrações:
- .NET Standard 2.1 - Máxima compatibilidade com diferentes frameworks
- Azure.Messaging.ServiceBus - SDK oficial do Azure para definições de tipos
- Microsoft.Extensions.Logging.Abstractions - Abstrações de logging
- Microsoft.Extensions.Configuration.Abstractions - Abstrações de configuração
- Microsoft.Extensions.Options - Sistema de opções do .NET
- Microsoft.Extensions.DependencyInjection.Abstractions - Abstrações de DI
Por que essas dependências?
- Azure.Messaging.ServiceBus: Fornece tipos nativos (ServiceBusMessage, etc.) usados nas interfaces
- Microsoft.Extensions.*: Padrões estabelecidos do ecossistema .NET para configuração e DI
- .NET Standard 2.1: Garante compatibilidade com .NET Framework, .NET Core e .NET 5+
🔄 Compatibilidade
Versionamento
- Major Version: Mudanças incompatíveis nas interfaces públicas
- Minor Version: Adição de novos membros (sempre backward compatible)
- Patch Version: Correções de bugs e melhorias na documentação
Breaking Changes
Mudanças que quebram compatibilidade:
- Remoção de métodos da interface
- Mudança de assinatura de métodos existentes
- Remoção de propriedades de configuração
Mudanças que mantêm compatibilidade:
- Adição de novos métodos com implementação padrão
- Adição de novas propriedades com valores padrão
- Adição de novos parâmetros opcionais
📄 Licença
Este projeto está licenciado sob a Licença MIT.
c Suporte
Para dúvidas e suporte técnico:
- 📧 Email: suporte@nuuvify.com
- 📋 Issues: GitHub Issues
- 📖 Documentação: Wiki do Projeto
- 💬 Discussões: GitHub Discussions
📈 Versionamento
Este projeto segue o Semantic Versioning:
- MAJOR: Mudanças incompatíveis na API
- MINOR: Novas funcionalidades mantendo compatibilidade
- PATCH: Correções de bugs mantendo compatibilidade
Consulte o CHANGELOG.md para ver todas as mudanças detalhadas.
c🔗 Pacotes Relacionados
- Nuuvify.CommonPack.AzureServiceBus - Implementação completa
- Nuuvify.CommonPack.UnitOfWork.Abstraction - Padrão Unit of Work
- Nuuvify.CommonPack.Domain - Abstrações de domínio
- Nuuvify.CommonPack.Security.Abstraction - Abstrações de segurança
🏢 Sobre a Nuuvify
A Nuuvify é uma empresa especializada em soluções tecnológicas para transformação digital, oferecendo bibliotecas e ferramentas robustas para acelerar o desenvolvimento de aplicações empresariais.
Outros Pacotes da CommonPack
Nuuvify.CommonPack.UnitOfWork
- Implementação do padrão Unit of WorkNuuvify.CommonPack.Email
- Biblioteca para envio de emailsNuuvify.CommonPack.Security
- Ferramentas de segurançaNuuvify.CommonPack.Middleware
- Middlewares customizadosNuuvify.CommonPack.Extensions
- Extensões úteis para .NET
Desenvolvido com ❤️ pela equipe Nuuvify.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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. net9.0 was computed. 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. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Azure.Messaging.ServiceBus (>= 7.18.1)
- Microsoft.Extensions.Configuration.Abstractions (>= 8.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Options (>= 8.0.2)
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
2.1.0-test.25101302 | 2 | 10/13/2025 |
2.1.0-test.25101102 | 1 | 10/12/2025 |
# Changelog
Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/),
e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Alterado
- 📝 Documentação completa atualizada (README.md)
- 🏷️ Tags de PackageTags otimizadas para melhor descoberta no NuGet
- ✨ Descrição e Summary do pacote atualizadas com foco em abstrações
- 📊 Seção de dependências expandida com explicações detalhadas
### Adicionado
- 🆔 Badges do NuGet Version e Licença MIT no README
- 📚 Seção sobre outros pacotes da CommonPack
- 🏢 Informações sobre a empresa Nuuvify
- 📈 Seção de versionamento seguindo Semantic Versioning
- 💬 Links para GitHub Discussions e Issues atualizados
- 🎯 Seção explicando o objetivo das abstrações
- 🧪 Exemplos detalhados de testabilidade com Mock e Moq
- 🏗️ Diagrama de arquitetura de dependências
## [1.0.0] - 2025-10-08
### Adicionado
- 🎉 **Release inicial do Nuuvify.CommonPack.AzureServiceBus.Abstraction**
- 🔌 Interface principal `IServiceBusMessageSender` com todas as operações
- ⚙️ Classe de configuração `ServiceBusConfiguration` com validações
- 📝 Classe de opções `ServiceBusMessageOptions` para personalização de mensagens
- 📋 Documentação XML completa em todas as interfaces públicas
- ✅ Validações robustas de configuração com métodos `IsValid()` e `ValidateConfiguration()`
### Funcionalidades Principais
#### Interface IServiceBusMessageSender
Contrato completo para operações com Azure Service Bus:
- **Operações Simples**:
- `SendMessageToQueueAsync<T>()` - Envio para fila
- `SendMessageToTopicAsync<T>()` - Envio para tópico
- **Operações em Lote**:
- `SendBatchMessagesToQueueAsync<T>()` - Lote para fila
- `SendBatchMessagesToTopicAsync<T>()` - Lote para tópico
- **Mensagens Agendadas**:
- `ScheduleMessageToQueueAsync<T>()` - Agendamento para fila
- `ScheduleMessageToTopicAsync<T>()` - Agendamento para tópico
- **Cancelamento de Agendamento**:
- `CancelScheduledMessageInQueueAsync()` - Cancelar em fila
- `CancelScheduledMessageInTopicAsync()` - Cancelar em tópico
- **Recursos Avançados**:
- Suporte completo a `CancellationToken`
- Implementação de `IAsyncDisposable`
- Opções personalizáveis via `ServiceBusMessageOptions`
#### ServiceBusConfiguration
Classe de configuração tipada com propriedades:
- **Conectividade**:
- `ConnectionString` - String de conexão do Azure Service Bus
- `DefaultQueueName` - Fila padrão para operações
- `DefaultTopicName` - Tópico padrão para operações
- **Timeouts e Retry**:
- `OperationTimeoutSeconds` - Timeout para operações (padrão: 30s)
- `MaxRetryAttempts` - Máximo de tentativas (padrão: 3)
- `RetryDelaySeconds` - Delay entre retries (padrão: 5s)
- **Performance**:
- `MaxBatchSize` - Tamanho máximo de batch (padrão: 100)
- `EnableSessions` - Habilitar sessões para ordem (padrão: false)
- `EnablePartitioning` - Particionamento (padrão: false)
- **Mensagens**:
- `DefaultMessageTtlMinutes` - TTL padrão (padrão: 60min)
- **Validação**:
- `IsValid()` - Validação rápida da configuração
- `ValidateConfiguration()` - Validação detalhada com lista de erros
#### ServiceBusMessageOptions
Opções avançadas para personalização de mensagens:
- **Identificação**:
- `MessageId` - ID único da mensagem
- `CorrelationId` - ID de correlação para rastreamento
- `SessionId` - ID da sessão para mensagens ordenadas
- **Controle de Vida**:
- `TimeToLive` - Tempo de vida da mensagem
- `ScheduledEnqueueTime` - Agendamento para entrega futura
- **Metadados**:
- `Subject` - Assunto/rótulo da mensagem
- `ContentType` - Tipo de conteúdo (application/json, etc.)
- `ApplicationProperties` - Propriedades customizadas
- **Roteamento**:
- `ReplyTo` - Destino para resposta
- `ReplyToSessionId` - Sessão para resposta
- `PartitionKey` - Chave de particionamento
- `ViaPartitionKey` - Chave de partição via
### Arquitetura e Design
#### Princípios SOLID
- **Single Responsibility**: Cada classe tem responsabilidade única e bem definida
- **Open/Closed**: Interfaces abertas para extensão, fechadas para modificação
- **Liskov Substitution**: Implementações podem ser substituídas sem afetar o código cliente
- **Interface Segregation**: Interface focada apenas em operações de messaging
- **Dependency Inversion**: Aplicação depende de abstrações, não de implementações
#### Benefícios das Abstrações
1. **Testabilidade**: Facilita criação de mocks e testes unitários
2. **Flexibilidade**: Permite múltiplas implementações
3. **Desacoplamento**: Reduz dependências entre camadas
4. **Manutenibilidade**: Mudanças de implementação não afetam consumidores
#### Compatibilidade
- **.NET Standard 2.1**: Máxima compatibilidade com diferentes frameworks
- **Async/Await**: Suporte completo a programação assíncrona
- **Nullable Reference Types**: Segurança de tipos melhorada
- **Generic Support**: Métodos genéricos para qualquer tipo de mensagem
### Dependências
- **Azure.Messaging.ServiceBus** - SDK oficial do Azure Service Bus
- **Microsoft.Extensions.Logging.Abstractions** - Abstrações de logging
- **Microsoft.Extensions.Configuration.Abstractions** - Abstrações de configuração
- **Microsoft.Extensions.Options** - Sistema de opções do .NET
- **Microsoft.Extensions.DependencyInjection.Abstractions** - Abstrações de DI
### Target Framework
- **.NET Standard 2.1** - Compatibilidade máxima com ecossistema .NET
- **Nullable Reference Types** habilitado
- **LangVersion: latest** para recursos modernos do C#
### Casos de Uso Suportados
#### Para Desenvolvedores de Aplicação
- Injeção de dependência via `IServiceBusMessageSender`
- Configuração via `ServiceBusConfiguration`
- Testes unitários com mocks da interface
#### Para Desenvolvedores de Biblioteca
- Implementação da interface `IServiceBusMessageSender`
- Extensão de funcionalidades via herança
- Integração com containers de DI
#### Ambientes Suportados
- **APIs REST**: Controllers que enviam mensagens
- **Worker Services**: Processamento em background
- **Console Applications**: Aplicações de linha de comando
- **Blazor Applications**: Aplicações web interativas
- **WinForms/WPF**: Aplicações desktop
---
## Tipos de Mudanças
- `Adicionado` para novas funcionalidades
- `Alterado` para mudanças em funcionalidades existentes
- `Descontinuado` para funcionalidades que serão removidas em breve
- `Removido` para funcionalidades removidas
- `Corrigido` para correções de bugs
- `Segurança` para correções de vulnerabilidades
## Convenções de Versionamento
Este projeto segue [Semantic Versioning](https://semver.org/):
- **MAJOR** (X.0.0): Mudanças incompatíveis na API
- **MINOR** (0.X.0): Novas funcionalidades mantendo compatibilidade
- **PATCH** (0.0.X): Correções de bugs mantendo compatibilidade
### Breaking Changes Policy para Abstrações
#### Mudanças que QUEBRAM compatibilidade:
- Remoção de métodos da interface `IServiceBusMessageSender`
- Mudança de assinatura de métodos existentes
- Remoção de propriedades de `ServiceBusConfiguration` ou `ServiceBusMessageOptions`
- Alteração de tipos de retorno ou parâmetros
#### Mudanças que MANTÊM compatibilidade:
- Adição de novos métodos com implementação padrão (`default interface methods`)
- Adição de novas propriedades com valores padrão
- Adição de novos parâmetros opcionais
- Melhorias na documentação XML
#### Estratégia de Migração
- **v1.x**: Estabilidade máxima - mudanças breaking serão evitadas
- **v2.x**: Mudanças breaking serão bem documentadas com guia de migração
- **Deprecation**: Funcionalidades serão marcadas como `[Obsolete]` por pelo menos uma versão minor antes da remoção
### Release Cycle
- **Patch releases**: Conforme necessário para correções críticas
- **Minor releases**: Mensalmente com novas funcionalidades
- **Major releases**: Anualmente ou quando necessário para evolução da arquitetura
---
## Links Úteis
- [Azure Service Bus Documentation](https://docs.microsoft.com/azure/service-bus-messaging/)
- [.NET Standard 2.1 API](https://docs.microsoft.com/dotnet/standard/net-standard)
- [Dependency Injection in .NET](https://docs.microsoft.com/dotnet/core/extensions/dependency-injection)
- [Semantic Versioning](https://semver.org/)
- [Keep a Changelog](https://keepachangelog.com/)
- [Nuuvify CommonPack Repository](https://github.com/nuuvify/Nuuvify.CommonPack)
- [NuGet Package](https://www.nuget.org/packages/Nuuvify.CommonPack.AzureServiceBus.Abstraction/)
---
**Nota**: Este changelog é mantido manualmente seguindo as convenções do [Keep a Changelog](https://keepachangelog.com/).
Para ver todas as mudanças detalhadas, consulte o [histórico de commits](https://github.com/nuuvify/Nuuvify.CommonPack/commits/backgroundservice) do repositório.