物联网中使用 MQTT 协议实验手册(一)

本实验的目标是让学员掌握在Java平台使用MQTT服务的方法。

实验环境准备

需要一下环境:

  1. docker - 运行 MQTT 服务
  2. JDK 8 - Java开发包
  3. IDEA 社区版

搭建 MQTT Broker

在 MQTT 的架构中,消息是通过 MQTT Broker 进行传输的。消息的生产者和消费者都连接到 MQTT Broker。

在本例中,为了简化 MQTT Broker 的安装和配置,我们直接使用 Eclipse Mosquitto 官方提供的 Docker 镜像来运行。

执行以下命令启动 MQTT Broker:

1
docker run -d -p 1883:1883 -p 9001:9001 --name mqtt-server eclipse-mosquitto

如果你还不熟悉 Docker 的基本操作,可以参考 Docker课堂实验手册(一) 系列文章。

建立Publish客户端

在 IDEA 中新建一个 maven 项目,在建立好项目之后,修改 pom.xml 文件,加入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<dependencies>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

添加一个名为: cn.com.hohistar.iot.mqtt 的包,在包中新建一个名为: BasicPublisher 的类,在其中加入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class BasicPublisher {

private static final String IOT_TOPIC = "basic-iot";


public static void main(String args[]) {

publish("Hello, MQTT");
}

public static void publish(String msg) {

try {
MqttClient client = new MqttClient("tcp://localhost:1883", MqttClient.generateClientId());
client.connect();
MqttMessage message = new MqttMessage();
message.setPayload( msg.getBytes());
client.publish(IOT_TOPIC, message);

System.out.println("Message published.");

client.disconnect();
} catch(MqttException e) {
e.printStackTrace();
}
}
}

建立Receiver客户端

在 IDEA 中新建一个 maven 项目,在建立好项目之后,修改 pom.xml 文件,加入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<dependencies>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

添加一个名为: cn.com.hohistar.iot.mqtt 包,在包中新建一个名为: BasicReceiver 的类,在其中加入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class BasicReceiver implements MqttCallback {

private static final String IOT_TOPIC = "basic-iot";

public static void main(String args[]) {

receive();
}

public static void receive() {

try {
MqttClient client = new MqttClient("tcp://localhost:1883", MqttClient.generateClientId());
client.setCallback(new BasicReceiver());
client.connect();

client.subscribe(IOT_TOPIC);

} catch(MqttException e) {
e.printStackTrace();
}
}

public void connectionLost(Throwable throwable) {
System.out.println("Connection to MQTT broker lost!");
}

public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
System.out.println("Message received:");
System.out.println("The topic is: " + topic);
System.out.println("The message is: " + new String(mqttMessage.getPayload()));
}

public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
}

本文标题:物联网中使用 MQTT 协议实验手册(一)

文章作者:晨星

发布时间:2019年11月18日 - 13:11

最后更新:2020年09月16日 - 08:09

原始链接:https://www.mls-tech.info/iot/java-mqtt-practice-01/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。