Nuuvify.CommonPack.AzureServiceBus.Abstraction 2.4.0-test.26060602

This is a prerelease version of Nuuvify.CommonPack.AzureServiceBus.Abstraction.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Nuuvify.CommonPack.AzureServiceBus.Abstraction --version 2.4.0-test.26060602
                    
NuGet\Install-Package Nuuvify.CommonPack.AzureServiceBus.Abstraction -Version 2.4.0-test.26060602
                    
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.4.0-test.26060602" />
                    
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.4.0-test.26060602" />
                    
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.4.0-test.26060602
                    
#r "nuget: Nuuvify.CommonPack.AzureServiceBus.Abstraction, 2.4.0-test.26060602"
                    
#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.4.0-test.26060602
                    
#: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.4.0-test.26060602&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Nuuvify.CommonPack.AzureServiceBus.Abstraction&version=2.4.0-test.26060602&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.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`.