超详细!!在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,后续更新………………

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows10环境下,使用Spring Boot发送JSON数据可以按照以下步骤操作: 1. 添加依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-mqtt</artifactId> <version>5.3.2.RELEASE</version> </dependency> ``` 2. 配置MQTT服务端 在application.properties中添加以下配置信息: ``` spring.mqtt.username=<your_username> spring.mqtt.password=<your_password> spring.mqtt.url=<mqtt_server_url> spring.mqtt.defaultTopic=<default_topic> ``` 3. 编写发送JSON数据的代码 ```java import org.springframework.integration.mqtt.support.MqttHeaders; import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; import org.springframework.stereotype.Service; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import com.fasterxml.jackson.databind.ObjectMapper; @Service public class MqttService { private static final String CHARSET = "UTF-8"; private static final int QOS = 1; private final String mqttUrl; private final String username; private final String password; private final String defaultTopic; public MqttService( @Value("${spring.mqtt.url}") String mqttUrl, @Value("${spring.mqtt.username}") String username, @Value("${spring.mqtt.password}") String password, @Value("${spring.mqtt.defaultTopic}") String defaultTopic) { this.mqttUrl = mqttUrl; this.username = username; this.password = password; this.defaultTopic = defaultTopic; } public void sendMessage(Object payload, String topic) { String json = toJson(payload); Message<String> message = MessageBuilder .withPayload(json) .setHeader(MqttHeaders.TOPIC, topic) .setHeader(MqttHeaders.QOS, QOS) .build(); send(message); } private void send(Message<String> message) { MqttConnectOptions options = new MqttConnectOptions(); options.setUserName(username); options.setPassword(password.toCharArray()); try { MqttClient client = new MqttClient(mqttUrl, MqttClient.generateClientId(), new MemoryPersistence()); client.connect(options); client.publish(message.getHeaders().get(MqttHeaders.TOPIC).toString(), new MqttMessage(message.getPayload().getBytes(CHARSET))); client.disconnect(); } catch (Exception e) { throw new RuntimeException(e); } } private String toJson(Object value) { try { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.writeValueAsString(value); } catch (Exception e) { throw new RuntimeException(e); } } } ``` 4. 在需要发送JSON数据的地方调用MqttService.sendMessage()方法 例如,在Controller中调用MqttService的sendMessage()方法: ```java @RestController public class MyController { @Autowired MqttService mqttService; @PostMapping("/send") public void send(@RequestBody MyData data) { mqttService.sendMessage(data, "my/topic"); } } ``` 这样,就可以使用Spring Boot发送JSON数据到MQTT服务端了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值