簡體   English   中英

MQTTNet 監聽主題消息

[英]MQTTNet Listen for Topic Messages

我正在我們現有的應用程序中集成MQTT ,我使用這個https://github.com/chkr1011/MQTTnet庫來運行嵌入式 MQTT 代理。

目前使用以下方法啟動代理:

public async Task StarBrokerAsync()
{
    var optionsBuilder = new MqttServerOptionsBuilder()
        .WithConnectionBacklog(ConnectionBacklog)
        .WithDefaultEndpointPort(Port);

    MqttServer = new MqttFactory().CreateMqttServer();
    await MqttServer.StartAsync(optionsBuilder.Build());
 }

我想要的是在不創建單獨的客戶端的情況下監聽特定主題中的消息。 我沒有找到圖書館的文檔或任何類似的問題。

有沒有解決問題的辦法?

據我所知,可以在服務器實例中執行此操作,您需要提供IMqttApplicationMessageReceivedHandler接口的實現。

讓我們考慮一個簡單的實現:

public class MessageHandler: IMqttApplicationMessageReceivedHandler
{
    public Task HandleApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs eventArgs)
    {
        if (eventArgs.ApplicationMessage.Topic == "name_of_desired_topic")
        {
            // Handle event
        }
    }
}

然后可以向MqttServer提供此處理程序的實例,如下所示:

public async Task StarBrokerAsync()
{
    // Start broker ...
    MqttServer.ApplicationMessageReceivedHandler = new MessageHandler();
}

在這種情況下,您只會收到來自特定主題的消息。 或者,您可以創建MqttClient connect實例並訂閱代理。

希望對您有所幫助。

mqttServer.UseApplicationMessageReceivedHandler(e =>
            {
                try
                {
                    string topic = e.ApplicationMessage.Topic;
                    if (string.IsNullOrWhiteSpace(topic) == false)
                    {
                        string payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
                        Console.WriteLine($"Topic: {topic}. Message Received: {payload}");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message, ex);
                }
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM