Nuuvify.CommonPack.AzureServiceBus.Abstraction 2.1.0-test.25101302

This is a prerelease version of Nuuvify.CommonPack.AzureServiceBus.Abstraction.
dotnet add package Nuuvify.CommonPack.AzureServiceBus.Abstraction --version 2.1.0-test.25101302
                    
NuGet\Install-Package Nuuvify.CommonPack.AzureServiceBus.Abstraction -Version 2.1.0-test.25101302
                    
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="Nuuvify.CommonPack.AzureServiceBus.Abstraction" Version="2.1.0-test.25101302" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Nuuvify.CommonPack.AzureServiceBus.Abstraction" Version="2.1.0-test.25101302" />
                    
Directory.Packages.props
<PackageReference Include="Nuuvify.CommonPack.AzureServiceBus.Abstraction" />
                    
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 Nuuvify.CommonPack.AzureServiceBus.Abstraction --version 2.1.0-test.25101302
                    
#r "nuget: Nuuvify.CommonPack.AzureServiceBus.Abstraction, 2.1.0-test.25101302"
                    
#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 Nuuvify.CommonPack.AzureServiceBus.Abstraction@2.1.0-test.25101302
                    
#: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=Nuuvify.CommonPack.AzureServiceBus.Abstraction&version=2.1.0-test.25101302&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Nuuvify.CommonPack.AzureServiceBus.Abstraction&version=2.1.0-test.25101302&prerelease
                    
Install as a Cake Tool

Nuuvify.CommonPack.AzureServiceBus.Abstraction

.NET Standard 2.1 Abstractions NuGet Version License: MIT

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:

  1. Desacoplamento: Implementações podem referenciar apenas as abstrações
  2. Testabilidade: Facilita criação de mocks e testes unitários
  3. Flexibilidade: Permite múltiplas implementações da mesma interface
  4. 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

  1. Dependency Inversion: Aplicação depende de abstrações, não de implementações
  2. Flexibilidade: Pode trocar implementações sem alterar código da aplicação
  3. Testabilidade: Facilita criação de mocks e testes isolados
  4. 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:

📈 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

🏢 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


Desenvolvido com ❤️ pela equipe Nuuvify.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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).

## [2.1.0] - 2025-10-13

### 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

## [2.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.