- Linux安装EMQX
- pom.xml
<!-- https://mvnrepository.com/artifact/org.eclipse.paho/org.eclipse.paho.client.mqttv3 --> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.5</version> </dependency>
- application.yml
server: port: 8686 servlet: context-path: /mqtt spring: application: name: mqtt mqtt: url: tcp://192.168.1.97:1883 username: admin password: public client: id: mqtt-client-id
- MQTT配置
@Slf4j @Configuration public class MqttClientConfig { @Value("${spring.mqtt.url}") private String broker; @Value("${spring.mqtt.client.id}") private String clientId; @Value("${spring.mqtt.username}") private String username; @Value("${spring.mqtt.password}") private String password; private MqttClient client; @PostConstruct public void init() throws Exception { connect(); } public void connect() throws Exception { MemoryPersistence persistence = new MemoryPersistence(); client = new MqttClient(broker, clientId, persistence); // MQTT 连接选项 MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setUserName(username); connOpts.setPassword(password.toCharArray()); // 保留会话 connOpts.setCleanSession(true); // 设置回调 client.setCallback(new OnMessageCallback()); // 建立连接 System.out.println("Connecting to broker: " + broker); client.connect(connOpts); System.out.println("Connected"); } public void disconnect() throws Exception { client.disconnect(); } public void subscribe(String topic,int qos) throws Exception { // 订阅 topic client.subscribe(topic, qos); System.out.println("Subscribed to topic: " + topic); } public void publish(int qos,String topic,String content) throws Exception { // 发布消息 MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(qos); client.publish(topic, message); System.out.println("Message published"); } }
-
MQTT回调
@Configuration public class OnMessageCallback implements MqttCallback { public void connectionLost(Throwable cause) { // 连接丢失后,一般在这里面进行重连 System.out.println("连接断开,可以做重连"); } public void messageArrived(String topic, MqttMessage message) throws Exception { // subscribe后得到的消息会执行到这里面 System.out.println("接收消息主题:" + topic); System.out.println("接收消息Qos:" + message.getQos()); System.out.println("接收消息内容:" + new String(message.getPayload())); } public void deliveryComplete(IMqttDeliveryToken token) { System.out.println("deliveryComplete---------" + token.isComplete()); } }
- MQTT接口
@RestController public class MqttController { @Resource private MqttClientConfig mqttClient; @RequestMapping("/connect") public String connect() throws Exception { mqttClient.connect(); return "连接mqtt服务器"; } @RequestMapping("/disconnect") public String disconnect() throws Exception { mqttClient.disconnect(); return "断开mqtt服务器"; } @RequestMapping("/subscribe") public String subscribe(String topic,int qos) throws Exception { mqttClient.subscribe(topic,qos); return "订阅成功:"+topic; } @RequestMapping("/publish") public String publish(int qos,String topic,String content) throws Exception { mqttClient.publish(qos, topic, content); return "发送成功:"+topic+"-->"+content; } }
- MQTT测试
- 参考文档
EMQX Enterprise 文档、EMQX Cloud 文档
SpringBoot+MQTT(方案一)
最新推荐文章于 2024-07-07 18:31:26 发布