在我的 ASP.Net Core 6 应用程序中,名为 MqttClientService 的 BackgroundService 任务运行一个 MQTTNet 客户端,该客户端处理传入的 mqqt 消息并用消息进行响应以指示它已成功。
我已经从 MQTTNet 存储库获取了示例控制台应用程序来使用Console.ReadLine(),但这对于我的用例来说感觉就像是一种黑客攻击。有没有更好的方法来让BackgroundService处理传入的消息而不需要不断地重新启动?
有一个使用 Asp.Net Core 和 MQTTNet 版本 3 的示例,但它使用由接口实现的句柄,而不是库现在使用的异步事件:MQTTNet 的升级指南。
任何信息将不胜感激,谢谢。
Services/ 中的 MqttClientService.cs
using MQTTnet;
using MQTTnet.Client;
using System.Text;
namespace MqttClientAspNetCore.Services
{
public class MqttClientService : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await Handle_Received_Application_Message();
}
}
public static async Task Handle_Received_Application_Message()
{
var mqttFactory = new MqttFactory();
using (var mqttClient …Run Code Online (Sandbox Code Playgroud) 当客户端订阅某个主题时,我从 MQTT 服务器发布 1000 条消息。MQTT 客户端未收到某些消息。这是一个错误还是我实施了错误?
以下是服务器和客户端配置示例。
using MQTTnet;
using MQTTnet.Server;
using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MqttNetServerExample
{
class Program
{
private static IMqttServer _mqttServer;
static void Main(string[] args)
{
// Configure MQTT server.
var optionsBuilder = new MqttServerOptionsBuilder().WithConnectionBacklog(100)
.WithDefaultEndpointPort(1884);
// Define a mqttServer
_mqttServer = new MqttFactory().CreateMqttServer();
// Message arrived configuration
_mqttServer.UseApplicationMessageReceivedHandler(async e =>
{
if (Encoding.UTF8.GetString(e.ApplicationMessage.Payload)== "Test Message")
{
Console.WriteLine("subscription message received");
Console.WriteLine("Simulating messages...");
await Simulate();
}
});
// When a new client …Run Code Online (Sandbox Code Playgroud)