1.开启EMQX
EMQX链接:https://pan.baidu.com/s/1yz3mU0diP3FRQfFynCE9Mw?pwd=c85o
提取码:c85o
本机地址+18083,例如:http://127.0.0.1:18083/
默认用户名:admin
默认密码:admin
2.在springboot中配置MQTT
2.1引入MQTT依赖
<dependency><!--MQTT依赖--> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.5</version> <!-- 或者适用于您的版本 --> </dependency>
2.2在aprprication.yml中配置
mqtt: username: admin password: A1234567 broker: tcp://127.0.0.1:1883 clientId: SpringBoot timeout: 60 keepAlive: 20 qos: 1 topic: ledTopic
2.3编写配置类MqttConfig
@Configuration
@Slf4j
public class MqttConfig {
@Value("${mqtt.username}")//以参数配置化的方式注入数据
private String username;
@Value("${mqtt.password}")
private String password;
@Value("${mqtt.broker}")
private String broker;
@Value("${mqtt.clientId}")
private String clientId;
@Value("${mqtt.timeout}")
private Integer timeout;
@Value("${mqtt.keepAlive}")
private Integer keepAlive;
@Value("${mqtt.qos}")
private Integer qos;
@Value("${mqtt.topic}")
private String defaultTopic;
@Bean//将此类放进ioc容器
public MqttClient mqttClient() throws MqttException {//创建构造器
MqttConnectOptions options = new MqttConnectOptions();//连接mqtt
//配置 MQTT 连接选项
options.setUserName(username);//连接名
options.setPassword(password.toCharArray());//连接密码,将密码转成字符数组
MqttClient mqttClient = new MqttClient(broker, clientId);//地址+端口,客户端id
mqttClient.connect(options);//开始操作
//spring boot 作为mqtt的客户端:收到消息时调用
mqttClient.subscribe(defaultTopic, new IMqttMessageListener() /*添加消息监听*/{
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
String payload = new String(message.getPayload());
log.info("收到来自主题 " + topic + " 的消息:" + payload);
}
});
return mqttClient;
}
}
3.编写controller类
@RestController
public class MqttController {
@Autowired
MqttService mqttService;//注入service
@GetMapping("/led")//访问方式为get,通过路径传递参数
public String ledButton(@RequestParam Integer state) throws MqttException {
mqttService.setLedState(state);//调用service方法
return "操作成功";
}
}
4.编写Service类
@Slf4j
@Service
public class MqttService {
@Autowired
private MqttClient client;
@Value("${mqtt.topic}")
private String topic;
public void setLedState(Integer state) throws MqttException {
MqttMessage mqttMessage=new MqttMessage(String.valueOf(state).getBytes());
client.publish(topic,mqttMessage);
}
}
完成上配置以及代码编写
演示
1.启动
2.在MQTT中创建链接,并订阅ledTopic主题
3.查看EQMX
4.在MQTT客户端发送消息
5.在控制台中看到
6.通过apifox发送消息(postman同理)
7.控制台效果
扩展:
可通过arduino编写代码连接相应模块,例如:ESP8266,后续更新………………