JAVA-MQTT使用

JAVA-MQTT使用

MAVEN依赖

    <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.2.2</version>
        </dependency>

配置类

    @Value("${govappt.dev.mqtt.broker:tcp://127.0.0.1:1883}")
    private String mqttBroker;

    @Value("${govappt.dev.mqtt.clientId:gov-appt-***}") //clientId不能相同会挤掉
    private String mqttClientId;

    @Value("${govappt.dev.mqtt.username:admin}")
    private String mqttUsername;

    @Value("${govappt.dev.mqtt.password:public}")
    private String mqttPassword;


    @Bean
    MqttClient mqttClient() {
        try {
            MemoryPersistence persistence = new MemoryPersistence();
            MqttClient client = new MqttClient(mqttBroker, mqttClientId, persistence);

            // MQTT 连接选项
            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setUserName(mqttUsername);
            connOpts.setPassword(mqttPassword.toCharArray());
            // 保留会话
            connOpts.setCleanSession(true);

            // 设置回调
            client.setCallback(new MqttCallback() {
                @Override
                public void connectionLost(Throwable throwable) {
                    log.info("mqtt:connectionLost", throwable);
                }

                @Override
                public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
                    log.info("mqtt:messageArrived,{},{}", s, mqttMessage);
                }

                @Override
                public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
                    log.info("mqtt:messadeliveryCompletegeArrived,{}", iMqttDeliveryToken);
                }
            });


            // 建立连接
            client.connect(connOpts);


            //client.subscribe("/govappt/platform", new IMqttMessageListener() {
            //    @Override
            //    public void messageArrived(String topic, MqttMessage message) throws Exception {
            //        log.info("topic:{},content:{}",topic,new String(message.getPayload()));
            //    }
            //});


            return client;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

发送消息

  @Autowired
    MqttClient mqttClient;
    @Value("${gov-appt.sn:002}")
    private String devSn;

    public void syncConfig() {
        //发送消息通知更新配置
        MqttMessage mqttMessage = new MqttMessage();
        mqttMessage.setPayload("startSyncConfig".getBytes());
        try {
            mqttClient.publish("/govappt/***/" + devSn, mqttMessage);
            log.info("发送同步配置消息");
        } catch (MqttException e) {
            throw new RuntimeException(e);
        }
    }

接收消息

    @PostConstruct
    public void init() {
        try {
            mqttClient.subscribe("/govappt/***/" + devSn, new IMqttMessageListener() {
                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {
                    System.out.println("Received message: " + new String(message.getPayload()));
                    // 调用处理消息的方法
                    processMessage(new String(message.getPayload()));
                }
            });


            mqttClient.subscribe("/govappt/admin/" + devSn, new IMqttMessageListener() {
                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {
                    log.info("接收同步配置消息:{}", message.getPayload());
                    System.out.println("Received message: " + new String(message.getPayload()));
                    // 调用同步配置程序
                    syncConfig(new String(message.getPayload())); //处理完毕可发现消息通知发送者
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @PreDestroy
    public void cleanUp() {
        // 在这里执行清理操作,例如取消订阅 MQTT 主题
        try {
            mqttClient.unsubscribe("/govappt/platform");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值