从服务器到客户端,再到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;
@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.然后先将SubController跑起来,再跑PushController,
这是没有使用实体类的订阅客户端数据和Mqttfx数据,都接收到了
4.再看一下实体类,这里需要导入一下fastjson的依赖,然后将实体类转为了字符串,可以看到都接收到了正确的主题内容,
1 2 3 4 5
| <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency>
|
5.再测试一下从Mqttfx发布一个主题,看Java端和Mqttfx端能否同时接收到,同样需要先订阅,再发布,
发布主题及其内容:
Mqttfx端接收:
Java端接收;
6.测试都没有问题了,我们再看一下Emqx给提供的后台管理界面,首页就不看了,一些监控信息,看一下客户端,
push就是Java中的发布端客户端,sub就是Java中的订阅端客户端,fx就是Mqttfx工具的客户端:
这是刚刚测试的两个主题:
总结,我自己也测试了一下Apollo,也没有问题的,操作一模一样,就不贴出来了,感觉还是Emqx安逸一点,另外一点就是我还没有尝试将其放在linux上,甚至docker上,但是想来应该差不多吧,只要对linux和docker熟悉一点,差异不会太大,最后提醒:ClientId必须唯一,真别忘了,希望明年的我看到我自己的文章,会有不错的回忆。