超详细!!在SpringBoot环境下与MQTT通信的实践

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,后续更新………………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值