SpringBoot+MQTT(方案一)

  1. Linux安装EMQX
  2. 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>
  3. 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
  4. 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");
        }
    
    }
  5. 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());
        }
    }
  6. 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;
        }
    
    }
  7. MQTT测试


  8. 参考文档
    EMQX Enterprise 文档EMQX Cloud 文档
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot 是一个用于创建独立、基于 Spring 的应用程序的框架,它简化了 Spring 的配置和部署过程。MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布订阅模式的消息传输协议,广泛应用于物联网领域。WebSocket是一种全双工通信协议,可以在浏览器和服务器之间建立持久性的连接。 在Spring Boot中,可以通过整合 Spring Integration 和 Eclipse Paho(MQTT Java 客户端)来实现 MQTT 推送。首先,需要将 Paho MQTT 依赖添加到项目的 Maven 或 Gradle 构建文件中。然后,通过编写相应的 Java 代码,在 Spring Boot 中配置 MQTT 的连接和订阅信息。可以使用 @EnableMqtt 注解来启用 MQTT 功能,并通过配置文件指定 MQTT 的连接参数和订阅主题。最后,使用 @MqttListener 注解定义一个消息监听器,用于接收和处理 MQTT 推送的消息。 而要实现 WebSocket 的推送功能,可以通过整合 Spring WebSocket 和 Spring Security 实现。首先,在 Spring Boot 中配置 WebSocket 的端点,并编写相应的处理器类来处理 WebSocket 的连接和消息。可以使用 @EnableWebSocket 和 @Configuration 注解启用 WebSocket 功能,并将自定义的 WebSocketConfig 类添加到 Spring Boot 的配置中。接着,使用 @Component 注解将 WebSocket 处理器类注册为 Spring 的 Bean。最后,通过编写前端代码,在浏览器中建立 WebSocket 连接,并发送和接收消息。 综上所述,通过整合 Spring BootMQTT 和 WebSocket 技术,可以实现 MQTT 和 WebSocket 的推送功能。可以通过配置文件和编写相应的 Java 和前端代码来完成相应的配置和接口开发。这样就可以实现在 Spring Boot 应用中利用 MQTT 和 WebSocket 实现消息的推送和接收。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

童心同萌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值