0%

MQTT使用Java连接测试-二

从服务器到客户端,再到java端,都搞好了,代码已经写好并贴出来了,还有找不到地方的请参看:

MQTT两种服务器的安装使用

MQTT客户端的安装并连接两种服务器

MQTT使用Java连接测试-一

开始测试,我会从Java的发布客户端发布主题后,既能在java的订阅客户端接收到,也能在Mqttfx上面接收到,然后在Mqttfx上发布主题,也必然是在Mqttfx上能接收到,还要在Java的订阅客户端上能接收到,请继续阅读(拷贝),

1.使用PushController发布一个主题,并设置消息,注意这里就使用Mqtt给我们封装的MqttMessage,我尝试了不使用,然后自己封装一个实体,很麻烦,你如果需要一个实体,可以选择将实体转换为字符串放进去,

这是没有实体:

1
2
3
4
5
6
7
8
public class PushController {
public static void main(String[] args) {
MqttPushClient instance = MqttPushClient.getInstance();
MqttMessage message = new MqttMessage();
message.setPayload("发布一条消息".getBytes());
instance.publish("topicPub",message);
}
}

新建一个实体:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package cn.zl.springbootmqtt.entity;

import lombok.Data;

/**
* @Description:
* @Author: zllwsy
* @Date: 2020/10/28 10:43
*/
@Data
public class Equiment {

private String id;

private String name;

private String weight;

private Integer status;
}

这是发布实体的信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class PushController {
public static void main(String[] args) {
MqttPushClient instance = MqttPushClient.getInstance();
MqttMessage message = new MqttMessage();
Equiment equiment = new Equiment();
equiment.setId("1");
equiment.setName("井盖");
equiment.setWeight("25.5");
equiment.setStatus(1);
String s = JSONObject.toJSONString(equiment);
message.setPayload(s.getBytes());
instance.publish("topicPub",message);
}
}

2.在Mqttfx中订阅主题topicPub,在订阅客户端也订阅这个主题,

1
2
3
4
5
6
public class SubController {
public static void main(String[] args) {
MqttSubClient instance = MqttSubClient.getInstance();
instance.subscribe("topicPub");
}
}

3.1

3.然后先将SubController跑起来,再跑PushController,

这是没有使用实体类的订阅客户端数据和Mqttfx数据,都接收到了

3.2

3.3

4.再看一下实体类,这里需要导入一下fastjson的依赖,然后将实体类转为了字符串,可以看到都接收到了正确的主题内容,

1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>

3.4

3.5

5.再测试一下从Mqttfx发布一个主题,看Java端和Mqttfx端能否同时接收到,同样需要先订阅,再发布,

发布主题及其内容:

3.6

Mqttfx端接收:

3.7

Java端接收;

3.8

6.测试都没有问题了,我们再看一下Emqx给提供的后台管理界面,首页就不看了,一些监控信息,看一下客户端,

push就是Java中的发布端客户端,sub就是Java中的订阅端客户端,fx就是Mqttfx工具的客户端:

3.9

这是刚刚测试的两个主题:

3.10

总结,我自己也测试了一下Apollo,也没有问题的,操作一模一样,就不贴出来了,感觉还是Emqx安逸一点,另外一点就是我还没有尝试将其放在linux上,甚至docker上,但是想来应该差不多吧,只要对linux和docker熟悉一点,差异不会太大,最后提醒:ClientId必须唯一,真别忘了,希望明年的我看到我自己的文章,会有不错的回忆。

----------本文结束感谢您的阅读----------