本实验的目标是让学员掌握在Java平台使用MQTT服务的方法。
实验环境准备
需要一下环境:
- docker - 运行 MQTT 服务
- JDK 8 - Java开发包
- 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) { } }
|