Shared.ConsulConfig 1.1.0

dotnet add package Shared.ConsulConfig --version 1.1.0
                    
NuGet\Install-Package Shared.ConsulConfig -Version 1.1.0
                    
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="Shared.ConsulConfig" Version="1.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Shared.ConsulConfig" Version="1.1.0" />
                    
Directory.Packages.props
<PackageReference Include="Shared.ConsulConfig" />
                    
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 Shared.ConsulConfig --version 1.1.0
                    
#r "nuget: Shared.ConsulConfig, 1.1.0"
                    
#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 Shared.ConsulConfig@1.1.0
                    
#: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=Shared.ConsulConfig&version=1.1.0
                    
Install as a Cake Addin
#tool nuget:?package=Shared.ConsulConfig&version=1.1.0
                    
Install as a Cake Tool

🧠 Shared.ConsulConfig

Biblioteca .NET compartilhada para integração com o Consul, com cache em memória e atualização automática das variáveis de configuração.

Ideal para múltiplos projetos que utilizam o Consul como fonte de variáveis de ambiente, permitindo que cada sistema mantenha suas configurações atualizadas sem reiniciar a aplicação.


🚀 Funcionalidades

  • 🔁 Atualização automática das chaves do Consul em intervalos configuráveis
  • 💾 Cache em memória usando IMemoryCache
  • ⚙️ Integração simples via extensão AddConsulConfiguration()
  • 🧩 Suporte a chaves personalizadas e callbacks (Action<string>)
  • 🔒 Compatível com tokens ACL e Consul KV

📦 Instalação

Adicionar a referência ao pacote (GitHub Packages)

dotnet add package Shared.ConsulConfig --version 1.1.0 --source "https://nuget.pkg.github.com/codewiththiago/index.json"
⚠️ É necessário autenticar com um token do GitHub (GH_TOKEN) que tenha permissão de leitura em packages.

⚙️ Uso

1️⃣ Registro no Program.cs ou Startup.cs

using Shared.ConsulConfig;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddConsulConfiguration(
    consulUrl: "http://consul-server:8500/v1/kv",
    token: "<SEU_CONSUL_TOKEN>",
    configSetters: new List<KeyValuePair<string, Action<string>>>
    {
        new("bureaus-external/shared/rabbitmq-log-uri", v => Config.RabbitMQLogUri = v),
        new("bureaus-external/shared/jwt-secret", v => Config.JwtSecret = v)
    }
);

var app = builder.Build();
app.Run();

2️⃣ Exemplo de Config personalizado

public static class Config
{
    public static string RabbitMQLogUri { get; set; } = string.Empty;
    public static string JwtSecret { get; set; } = string.Empty;
}

3️⃣ Como funciona internamente

Ao iniciar a aplicação, o ConsulServices busca as chaves do Consul e armazena no cache.

O ConsulCacheUpdaterService roda em background e atualiza os valores periodicamente.

O Action<string> registrado em configSetters é chamado automaticamente sempre que um valor é atualizado.

🧩 Dependências

Pacote Versão Descrição Consul 1.6.10.8 Cliente oficial do Consul Microsoft.Extensions.Caching.Memory 8.0.1 Cache interno Microsoft.Extensions.Hosting 8.0.0 Suporte a background services Newtonsoft.Json 13.0.3 Serialização e desserialização JSON

🧱 Estrutura interna

Shared.ConsulConfig/
├── ConsulServices.cs              → Comunicação com o Consul e cache
├── ConsulCacheUpdaterService.cs   → Atualização periódica das variáveis
├── ConsulConfigExtensions.cs      → Extensão para IServiceCollection
├── ConsulKVResponse.cs            → Model do retorno do Consul
└── Shared.ConsulConfig.csproj     → Arquivo de build e metadados do pacote

🧰 Exemplos de uso prático

Exemplo 1 — API com atualização automática de segredos

Ideal para APIs que dependem de secrets no Consul, como JWT, URLs de serviços ou conexões com bancos de dados.

Exemplo 2 — Aplicação distribuída

Permite que múltiplas aplicações (em diferentes servidores) compartilhem as mesmas variáveis via Consul e atualizem automaticamente sem restart.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.0 293 10/21/2025 1.1.0 is deprecated because it is no longer maintained.