Nuuvify.CommonPack.AzureServiceBus.Abstraction
2.5.0-test.26060608
dotnet add package Nuuvify.CommonPack.AzureServiceBus.Abstraction --version 2.5.0-test.26060608
NuGet\Install-Package Nuuvify.CommonPack.AzureServiceBus.Abstraction -Version 2.5.0-test.26060608
<PackageReference Include="Nuuvify.CommonPack.AzureServiceBus.Abstraction" Version="2.5.0-test.26060608" />
<PackageVersion Include="Nuuvify.CommonPack.AzureServiceBus.Abstraction" Version="2.5.0-test.26060608" />
<PackageReference Include="Nuuvify.CommonPack.AzureServiceBus.Abstraction" />
paket add Nuuvify.CommonPack.AzureServiceBus.Abstraction --version 2.5.0-test.26060608
#r "nuget: Nuuvify.CommonPack.AzureServiceBus.Abstraction, 2.5.0-test.26060608"
#:package Nuuvify.CommonPack.AzureServiceBus.Abstraction@2.5.0-test.26060608
#addin nuget:?package=Nuuvify.CommonPack.AzureServiceBus.Abstraction&version=2.5.0-test.26060608&prerelease
#tool nuget:?package=Nuuvify.CommonPack.AzureServiceBus.Abstraction&version=2.5.0-test.26060608&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@zocate.li
- 📋 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)
- System.Diagnostics.DiagnosticSource (>= 8.0.1)
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.5.0-test.26060608 | 0 | 6/6/2026 |
| 2.5.0-test.26060606 | 0 | 6/6/2026 |
| 2.4.0-test.26060602 | 0 | 6/6/2026 |
| 2.4.0-test.26041707 | 0 | 4/17/2026 |
| 2.3.0-test.26033106 | 0 | 3/31/2026 |
| 2.2.0-test.25102904 | 0 | 10/29/2025 |
| 2.2.0-test.25102902 | 0 | 10/29/2025 |
| 2.2.0-test.25102802 | 0 | 10/29/2025 |
| 2.1.0-test.25101302 | 137 | 10/13/2025 |
| 2.1.0-test.25101102 | 1 | 10/12/2025 |
# Changelog - Nuuvify.CommonPack.AzureServiceBus.Abstraction
Todas as mudanças notáveis deste pacote 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/lang/pt-BR/spec/v2.0.0.html).
## [Não Lançado]
### Adicionado
### Alterado
### Corrigido
### Removido
### Segurança
## [Sem versão registrada] - 2025-10-13
### Alterado
- Tags de `PackageTags` no `.csproj` atualizadas para melhor descoberta no NuGet.
## [Sem versão registrada] - 2025-10-08
### Adicionado
- Release inicial do `Nuuvify.CommonPack.AzureServiceBus.Abstraction`.
- Interface `IServiceBusMessageSender` com operações para filas e tópicos: envio simples, envio em lote, agendamento e cancelamento de mensagens agendadas.
- Classe de configuração `ServiceBusConfiguration` com métodos `IsValid()` e `ValidateConfiguration()`.
- Classe de opções `ServiceBusMessageOptions` para personalização de mensagens (id, correlação, sessão, TTL, agendamento, propriedades customizadas).
- Suporte a `CancellationToken` em todas as operações.
- Interface estende `IAsyncDisposable`.