CamposDev.Mqtt
1.0.1
dotnet add package CamposDev.Mqtt --version 1.0.1
NuGet\Install-Package CamposDev.Mqtt -Version 1.0.1
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="CamposDev.Mqtt" Version="1.0.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CamposDev.Mqtt" Version="1.0.1" />
<PackageReference Include="CamposDev.Mqtt" />
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 CamposDev.Mqtt --version 1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: CamposDev.Mqtt, 1.0.1"
#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 CamposDev.Mqtt@1.0.1
#: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=CamposDev.Mqtt&version=1.0.1
#tool nuget:?package=CamposDev.Mqtt&version=1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
CamposDEV.Mqtt - Cliente MQTT Resiliente para .NET
Uma biblioteca .NET 9 para comunicação MQTT robusta e confiável, com suporte a reconexão automática, persistência de mensagens offline e retry inteligente.
📋 Características
- ✅ Reconexão Automática: Reconecta automaticamente quando a conexão com o broker é perdida
- ✅ Persistência Offline: Armazena mensagens localmente quando o broker está indisponível
- ✅ Retry Inteligente: Sistema de retry automático para mensagens falhadas
- ✅ Logging Estruturado: Integração completa com
ILogger - ✅ Configuração Flexível: Configuração via
IOptions<T>e appsettings.json - ✅ Thread-Safe: Operações seguras para ambientes multi-thread
- ✅ .NET 9: Otimizado para a versão mais recente do .NET
🚀 Instalação
dotnet add package CamposDEV.Mqtt
⚙️ Configuração
1. Configure o appsettings.json
{
"MqttBrokerSettings": {
"BrokerHost": "localhost",
"BrokerPort": 1883,
"Topic": "default/topic",
"RetryIntervalMinutes": 5,
"NormalIntervalSeconds": 30
}
}
2. Registre o serviço no Program.cs
using CamposDEV.Mqtt.Services;
using CamposDEV.Mqtt.Settings;
var builder = Host.CreateApplicationBuilder(args);
// Configura as opções do MQTT
builder.Services.Configure<MqttBrokerSettings>(builder.Configuration.GetSection("MqttBrokerSettings"));
// Registra o serviço MQTT
builder.Services.AddSingleton<IMqttBrokerService, MqttBrokerService>();
var app = builder.Build();
// Inicializa o cliente MQTT
var mqttService = app.Services.GetRequiredService<IMqttBrokerService>();
await mqttService.InitializeAsync();
app.Run();
💡 Como Usar
Publicando Mensagens
public class MeuWorkerService : BackgroundService
{
private readonly IMqttBrokerService _mqttService;
private readonly ILogger<MeuWorkerService> _logger;
public MeuWorkerService(IMqttBrokerService mqttService, ILogger<MeuWorkerService> logger)
{
_mqttService = mqttService;
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var dados = new
{
Timestamp = DateTime.UtcNow,
Temperatura = Random.Shared.Next(15, 35),
Umidade = Random.Shared.Next(40, 80)
};
var json = JsonSerializer.Serialize(dados);
// Publica a mensagem - se o broker estiver offline,
// a mensagem será armazenada e enviada quando reconectar
await _mqttService.PublishAsync("sensores/temperatura", json);
await Task.Delay(TimeSpan.FromSeconds(10), stoppingToken);
}
}
}
Exemplo com Diferentes Tópicos
Mensagem simples
await _mqttService.PublishAsync("logs/info", "Sistema inicializado");
Mensagem com retain (última mensagem será mantida pelo broker)
await _mqttService.PublishAsync("status/sistema", "online", retain: true);
Mensagem JSON estruturada
var evento = new
{
EventoId = Guid.NewGuid(),
Tipo = "PedidoCriado",
Dados = new { PedidoId = 12345, ClienteId = "ABC123" }
};
await _mqttService.PublishAsync("eventos/pedidos", JsonSerializer.Serialize(evento));
🔧 Configurações Avançadas
Propriedades do MqttBrokerSettings
| Propriedade | Tipo | Descrição | Padrão |
|---|---|---|---|
BrokerHost |
string |
Endereço do broker MQTT | localhost |
BrokerPort |
int |
Porta do broker | 1883 |
Topic |
string |
Tópico padrão para publicação | - |
RetryIntervalMinutes |
int |
Intervalo entre tentativas de reconexão (minutos) | 5 |
NormalIntervalSeconds |
int |
Intervalo normal entre operações (segundos) | 30 |
Exemplo de Configuração Avançada
{
"MqttBrokerSettings": {
"BrokerHost": "mqtt.meuservidor.com",
"BrokerPort": 8883,
"Topic": "empresa/dispositivos/sensores",
"RetryIntervalMinutes": 2,
"NormalIntervalSeconds": 15
}
}
🛡️ Recursos de Resiliência
1. Persistência Offline
Quando o broker está indisponível, as mensagens são automaticamente:
- Armazenadas em uma fila na memória
- Persistidas em arquivo JSON (
pending_messages.json) - Reenviadas automaticamente quando a conexão é restaurada
2. Reconexão Automática
- Detecta automaticamente perda de conexão
- Tenta reconectar em intervalos configuráveis
- Continua funcionando mesmo com instabilidade de rede
3. Monitoramento de Status
// Verifique o status da conexão
if (_mqttService is MqttBrokerService service)
{
if (service.IsConnected) { _logger.LogInformation("MQTT conectado"); }
else { _logger.LogWarning("MQTT desconectado - mensagens sendo enfileiradas"); }
}
📊 Logs e Monitoramento
A biblioteca gera logs estruturados que ajudam no monitoramento:
[INFO] Inicializando conexão MQTT...
[INFO] Conectado ao broker MQTT com sucesso!
[INFO] Mensagem publicada em sensores/temperatura: {"Timestamp":"2024-01-01T10:00:00Z"...}
[WARN] Falha no envio: ConnectionLost [INFO] Tentando reconectar MQTT (1/2)...
[INFO] Restauradas 3 mensagens pendentes do disco.
🔗 Compatibilidade
- .NET 9.0 ou superior
- Baseado na biblioteca HiveMQtt
- Compatível com qualquer broker MQTT (Mosquitto, AWS IoT, Azure IoT Hub, etc.)
📝 Exemplo Completo
//Program.cs
using CamposDEV.Mqtt.Services;
using CamposDEV.Mqtt.Settings;
using System.Text.Json;
var builder = Host.CreateApplicationBuilder(args);
// Configuração do MQTT
builder.Services.Configure<MqttBrokerSettings>(builder.Configuration.GetSection("MqttBrokerSettings"));
builder.Services.AddSingleton<IMqttBrokerService, MqttBrokerService>();
builder.Services.AddHostedService<SensorWorker>();
var app = builder.Build();
// Inicializa MQTT na startup var mqttService = app.Services.GetRequiredService<IMqttBrokerService>(); await mqttService.InitializeAsync();
app.Run();
// Worker Service para envio de dados
public class SensorWorker : BackgroundService
{
private readonly IMqttBrokerService _mqttService;
private readonly ILogger<SensorWorker> _logger;
public SensorWorker(IMqttBrokerService mqttService, ILogger<SensorWorker> logger)
{
_mqttService = mqttService;
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var dados = new
{
DeviceId = Environment.MachineName,
Timestamp = DateTime.UtcNow,
Temperature = Random.Shared.Next(15, 35),
Humidity = Random.Shared.Next(40, 80),
Status = "online"
};
await _mqttService.PublishAsync(
$"devices/{dados.DeviceId}/telemetry",
JsonSerializer.Serialize(dados)
);
_logger.LogInformation("Dados do sensor enviados: {Temperature}°C", dados.Temperature);
await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
}
}
}
🆘 Troubleshooting
Problema: Mensagens não estão sendo enviadas
Soluções:
- Verifique se
InitializeAsync()foi chamado na startup - Confirme as configurações do broker no appsettings.json
- Verifique os logs para erros de conexão
- Teste a conectividade de rede com o broker
Problema: Reconexão não está funcionando
Soluções:
- Verifique se
RetryIntervalMinutesnão está muito alto - Confirme se o broker está aceitando conexões
- Verifique se não há firewall bloqueando a conexão
Problema: Muitas mensagens pendentes
Soluções:
- Verifique a estabilidade da conexão de rede
- Considere reduzir
NormalIntervalSeconds - Monitore o arquivo
pending_messages.json
📞 Suporte
- GitHub: CamposDev.Microservice
- Website: camposdev.ind.br
📄 Licença
Este projeto está licenciado sob a Licença MIT.
Desenvolvido com ❤️ usando .NET 9 e HiveMQtt
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. 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.
-
net9.0
- HiveMQtt (>= 0.28.0)
- Microsoft.Extensions.Options (>= 9.0.10)
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.0.1 | 108 | 10/18/2025 |