Mosquitto
一款实现了 MQTT 协议的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。
从官网(http://mosquitto.org)下载安装后,会得到以下文件。
- mosquitto.exe:代理主程序。
- mosquitto.conf:配置文件。
- mosquitto_password:用户密码管理工具。
- mosquitto_pub.exe:用于发布消息的客户端。
- mosquitto_sub.exe:用于订阅消息的客户端。
第一步:启动 mosquitto.exe,不要关闭。
第二步:订阅。win + R,打开 cmd 界面,进入 mosquitto 的安装目录,输入 mosquitto_sub -v -t MqttTest。(-t:主题)
第三步:发布。win + R,打开 cmd 界面,进入 mosquitto 的安装目录,输入 mosquitto_pub -t MqttTest -m HelloMqtt。(-t:主题、-m:消息内容)
如果在第二步中的界面可以接收到第三步中发布的消息,说明安装成功了。
maven
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.1.0</version>
</dependency>
发送消息工具类
public class SendInfoClient {
public static MqttClient mqttClient = null;
private static MemoryPersistence memoryPersistence = null;
private static MqttConnectOptions mqttConnectOptions = null;
static {
init("111");
}
public static void init(String clientId) {
//初始化连接设置对象
mqttConnectOptions = new MqttConnectOptions();
//初始化MqttClient
if (null != mqttConnectOptions) {
// true 可以安全地使用内存持久性作为客户端断开连接时清除的所有状态
mqttConnectOptions.setCleanSession(true);
// 设置连接超时
mqttConnectOptions.setConnectionTimeout(30);
// 设置持久化方式
memoryPersistence = new MemoryPersistence();
if (null != memoryPersistence && null != clientId) {
try {
mqttClient = new MqttClient("tcp://127.0.0.1:1883", clientId, memoryPersistence);
} catch (MqttException e) {
e.printStackTrace();
}
}
} else {
System.out.println("mqttConnectOptions对象为空");
}
// 设置连接和回调
if (null != mqttClient) {
if (!mqttClient.isConnected()) {
MqttReceriveCallback mqttReceriveCallback = new MqttReceriveCallback();
mqttClient.setCallback(mqttReceriveCallback);
try {
System.out.println("创建连接");
mqttClient.connect(mqttConnectOptions);
} catch (MqttException e) {
e.printStackTrace();
}
}
} else {
System.out.println("mqttClient为空");
}
System.out.println("连接状态:" + mqttClient.isConnected());
}
public void closeConnect() {
// 关闭存储方式
if (null != memoryPersistence) {
try {
memoryPersistence.close();
} catch (MqttPersistenceException e) {
e.printStackTrace();
}
} else {
System.out.