EMQX是一个高度可扩展的开源MQTT消息broker,广泛应用于物联网、实时通讯等场景。本文将介绍如何在C#中使用EMQX进行通讯,并提供丰富的代码示例。
首先,我们需要安装MQTT客户端库。在C#中,我们可以使用MQTTnet库。使用NuGet包管理器安装MQTTnet:
C#Install-Package MQTTnet
以下是一个基本的连接示例:
C#internal class Program
{
static async Task Main(string[] args)
{
await ConnectToEmqx();
}
public static async Task ConnectToEmqx()
{
var mqttFactory = new MqttFactory();
var client = mqttFactory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
.WithTcpServer("localhost", 1883)
.WithClientId("CSharpClient")
.WithCredentials("admin", "123456")
.WithCleanSession()
.Build();
try
{
await client.ConnectAsync(options);
Console.WriteLine("Connected to EMQX successfully!");
}
catch (Exception ex)
{
Console.WriteLine($"Connection failed: {ex.Message}");
}
}
}
连接成功后,我们可以发布消息:
C#internal class Program
{
static async Task Main(string[] args)
{
var mqttFactory = new MqttFactory();
IMqttClient client = mqttFactory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
.WithTcpServer("localhost", 1883)
.WithClientId("CSharpClient")
.WithCredentials("admin", "123456")
.WithCleanSession()
.Build();
await client.ConnectAsync(options);
await PublishMessage(client);
}
public static async Task PublishMessage(IMqttClient client)
{
var message = new MqttApplicationMessageBuilder()
.WithTopic("test/topic")
.WithPayload("Hello, EMQX!")
.WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce)
.WithRetainFlag()
.Build();
await client.PublishAsync(message);
Console.WriteLine("Message published successfully!");
}
}
我们可以订阅一个或多个主题:
C#public async Task SubscribeToTopic(IMqttClient client)
{
await client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("test/#").Build());
Console.WriteLine("Subscribed to topic: test/#");
client.ApplicationMessageReceivedAsync += e =>
{
Console.WriteLine($"Received message: {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
return Task.CompletedTask;
};
}
下面是一个结合了连接、发布和订阅功能的完整示例:
C#using System;
using System.Text;
using System.Threading.Tasks;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Protocol;
public class EmqxClient
{
private IMqttClient _client;
public async Task ConnectAndCommunicate()
{
var mqttFactory = new MqttFactory();
_client = mqttFactory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
.WithTcpServer("localhost", 1883)
.WithClientId("CSharpClient")
.WithCredentials("username", "password")
.WithCleanSession()
.Build();
_client.ApplicationMessageReceivedAsync += e =>
{
Console.WriteLine($"Received message: {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
return Task.CompletedTask;
};
try
{
await _client.ConnectAsync(options);
Console.WriteLine("Connected to EMQX successfully!");
await SubscribeToTopic();
await PublishMessage();
// Keep the application running
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
finally
{
await _client.DisconnectAsync();
}
}
private async Task SubscribeToTopic()
{
await _client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("test/#").Build());
Console.WriteLine("Subscribed to topic: test/#");
}
private async Task PublishMessage()
{
var message = new MqttApplicationMessageBuilder()
.WithTopic("test/topic")
.WithPayload("Hello, EMQX!")
.WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce)
.WithRetainFlag()
.Build();
await _client.PublishAsync(message);
Console.WriteLine("Message published successfully!");
}
}
使用这个类:
C#class Program
{
static async Task Main(string[] args)
{
var emqxClient = new EmqxClient();
await emqxClient.ConnectAndCommunicate();
}
}
本文介绍了如何在C#中使用EMQX进行MQTT通讯,包括连接、发布、订阅等基本操作,以及一些高级功能的使用。EMQX强大的功能和高度的可扩展性使其成为物联网和实时通讯领域的优秀选择。通过本文的示例,开发者可以快速入门,并在此基础上开发更复杂的应用。
本文作者:rick
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!