springboot 整个mqtt demo
程序员文章站
2022-07-15 08:10:12
...
demo 大致结构
首先pom
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>
配置文件
#MQTT配置信息
#MQTT-用户名
spring.mqtt.username=admin
#MQTT-密码
spring.mqtt.password=public
#MQTT-服务器连接地址
spring.mqtt.url=tcp://127.0.0.1:1883
#MQTT-连接服务器默认客户端ID
spring.mqtt.client.id=mqttId
#MQTT-默认的消息推送主题,实际可在调用接口时指定
spring.mqtt.default.topic=topic
package com.pwl.mqtt.mqtt.config;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
/**
* MQTT发送消息配置
*
*/
@Configuration
@IntegrationComponentScan
public class MqttSenderConfig {
@Value("${spring.mqtt.username}")
private String username;
@Value("${spring.mqtt.password}")
private String password;
@Value("${spring.mqtt.url}")
private String hostUrl;
@Value("${spring.mqtt.client.id}")
private String clientId;
@Value("${spring.mqtt.default.topic}")
private String defaultTopic;
@Bean
public MqttConnectOptions getMqttConnectOptions(){
MqttConnectOptions mqttConnectOptions=new MqttConnectOptions();
mqttConnectOptions.setUserName(username);
mqttConnectOptions.setPassword(password.toCharArray());
mqttConnectOptions.setServerURIs(new String[]{hostUrl});
mqttConnectOptions.setKeepAliveInterval(2);
return mqttConnectOptions;
}
@Bean
public MqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
factory.setConnectionOptions(getMqttConnectOptions());
return factory;
}
//ServiceActivator注解表明当前方法用于处理MQTT消息,inputChannel参数指定了用于接收消息信息的channel。
@Bean
@ServiceActivator(inputChannel = "mqttOutboundChannel")
public MessageHandler mqttOutbound() {
MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(clientId, mqttClientFactory());
//如果设置成true,发送消息时将不会阻塞。
messageHandler.setAsync(true);
messageHandler.setDefaultTopic(defaultTopic);
return messageHandler;
}
@Bean
public MessageChannel mqttOutboundChannel() {
return new DirectChannel();
}
}
package com.pwl.mqtt.mqtt.config;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.messaging.handler.annotation.Header;
/**
* @author Pan Weilong
* @date 2020/7/23 10:31
* @description: 接口.
*/
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway {
void sendToMqtt(String data,@Header(MqttHeaders.TOPIC) String topic);
}
controller
package com.pwl.mqtt.mqtt.controller;
import com.pwl.mqtt.mqtt.config.MqttGateway;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Pan Weilong
* @date 2020/7/23 10:32
* @description: 接口.
*/
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private MqttGateway mqttGateway;
@GetMapping("/sendMqtt")
public String sendMqtt(String sendData){
mqttGateway.sendToMqtt(sendData,"helloo/123456");
return "OK";
}
}
客户端订阅helloo/123456 地址
访问127.0.0.1:8080/test/sendMqtt?sendData=mqtt 推送消息
mqtt fx 已收到推送的消息(发送消息前要订阅helloo/123456 这个地址)
上一篇: JAVA知识点全总结——(四)数据库
下一篇: ACM-图论完全总结(知识点+模板)
推荐阅读
-
Mac下部署springBoot项目到Docker中(demo)
-
Shiro Demo:SpringBoot+Shiro+Druid+MyBatis
-
SpringBoot (1) idea下的环境搭建及demo
-
Spring项目整合成SpringBoot的简单登录拦截Demo
-
springboot 整个mqtt demo
-
Springboot集成mqtt【demo】
-
SpringBoot web--RestfulCRUD-demo-登陆&拦截器(学习笔记17)
-
springboot整合rabbitmq DEMO
-
springBoot 集成RabbitMq Demo
-
springBoot+rabbitMq集成demo