一、說明
Shiny.Mqtt是一個mqtt客戶端,基於新生命團隊newlife.mqtt的封裝,推薦使用workerservice項目使用,支持.net core3,.net5,.net6
二、安裝
nuget直接搜索Shiny.Mqtt安裝
這是mqtt客戶端注入的代碼,可以看到,它是根據配置文件獲取mqtt配置的
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace Shiny.Mqtt
{
/// <summary>
/// Mqtt客戶端擴展類
/// </summary>
public static class MqttClientSetup
{
/// <summary>
/// 添加Mqtt客戶端服務
/// </summary>
/// <param name="services"></param>
/// <param name="redisConfiguration"></param>
/// <exception cref="ArgumentNullException"></exception>
public static void AddMqttClient(this IServiceCollection services, IConfiguration configuration, string section = "MqttSetting")
{
if (services == null) throw new ArgumentNullException(nameof(services));
var config = configuration.GetSection(section);
services.Configure<MqttSettingOptions>(config);
services.AddSingleton<IMqttClientService, MqttClientService>();
}
}
}
所以我們的配置文件要這麼配,這裏MqttSetting可以改成其他的,只要在注入的方法裏section參數改成對應的名稱就行了
{
"MqttSetting": {
"Host": "192.168.1.1",
"Port": 1883,
"UserName": "xxx",
"SecretKey": "xxx",
"ClientId": "xxx",
"Topic": "xxx"
}
}
我實在workerservice裏使用的mqtt客戶端,所以我是這麼注入的
三、使用
直接通過構造函數注入
直接通過getclient方法訂閱消息
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var topic = "Shiny/#";
_logger.LogInformation($"開始訂閱頻道:{topic}:" + DateTime.Now);
////接收上線消息
await mqttClientService.GetClient().SubscribeAsync(topic, (e) =>
{
Console.WriteLine("收到一條消息來自主題:" + "=>" + e.Topic);
});
}