java实现mqtt发布数据,订阅端接收到数据插入到数据库中。

一、 前期准备

mqtt入门的前两个博客请参看

1.01 MQTT小例子-连接
https://blog.csdn.net/qq_44218805/article/details/113453789
2.02MQTT小例子-java实现接入平台实现发布与订阅功能
https://blog.csdn.net/qq_44218805/article/details/113835063

二、需求

这里想用java实现,将mqtt订阅到的数据插入到数据库
	1.使用最简单的连接方式
	2.sql在项目中,下载后,自己导入本地即可。
	3.用java发布端发布数据,用java订阅端接收数据,再将其插入到数据库中

三、代码下载

下载地址:
https://gitee.com/nalan-taotao/javamqtttestSingle04

在这里插入图片描述

四、代码分析

1.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.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

2.连接类

public class connection {
    Connection dbconn = null;
    public Connection getConnection2(){
        String driver6 = "com.mysql.cj.jdbc.Driver";
        String driver5 = "com.mysql.jdbc.Driver";
        String dburl = "jdbc:mysql://127.0.0.1:3306/device01?useSSL=false&useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "XXX";
        try {
            //加载驱动
            Class.forName(driver5);
            //创建连接对象
            dbconn = DriverManager.getConnection(dburl,username,password);
            return dbconn;

        }catch (ClassNotFoundException e){
            System.out.println(e);
            System.out.println("驱动程序类没有找到");
            return null;

        }catch (SQLException e1){
            System.out.println(e1);
            return null;
        }

    }

    public void destroy(){
        try{
            dbconn.close();

        }catch (Exception e2){
            e2.printStackTrace();
        }
    }




}

3.改动注意

添加插入数据库的操作
在这里插入图片描述

五、测试

在测试包中进行测试
在这里插入图片描述
数据展示
在这里插入图片描述

java实现mqtt发布数据,订阅端接收到数据插入到数据库中–不过如此

六、下步目标

可不可以使用数据库连接池实现上面的需求
  • 3
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
首先,需要安装以下软件: 1. Eclipse Mosquitto:MQTT Broker 2. InfluxDB:时序数据库 3. Eclipse Paho:MQTT客户库 具体步骤如下: 1. 安装Eclipse Mosquitto和InfluxDB 在Linux上,可以使用以下命令安装: ``` sudo apt-get install mosquitto influxdb ``` 2. 安装Eclipse Paho 可以使用Maven在项目添加以下依赖: ``` <dependencies> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.5</version> </dependency> </dependencies> ``` 3. 从MQTT读取数据并保存到时序数据库 可以使用以下Java代码从MQTT读取数据并保存到InfluxDB: ```java import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.IMqttMessageListener; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; import org.influxdb.dto.BatchPoints; import org.influxdb.dto.Point; public class MqttToInfluxDB { public static void main(String[] args) throws MqttException { // MQTT连接参数 String brokerUrl = "tcp://localhost:1883"; String clientId = "JavaMqttClient"; String topic = "sensor/data"; // InfluxDB连接参数 String influxDbUrl = "http://localhost:8086"; String influxDbName = "test"; String measurementName = "sensor_data"; // 创建MQTT客户 IMqttClient mqttClient = new MqttClient(brokerUrl, clientId); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); mqttClient.connect(connOpts); // 创建InfluxDB客户 InfluxDB influxDB = InfluxDBFactory.connect(influxDbUrl); influxDB.createDatabase(influxDbName); // 订阅MQTT主题 mqttClient.subscribe(topic, new IMqttMessageListener() { @Override public void messageArrived(String topic, MqttMessage message) throws Exception { // 解析MQTT消息 String payload = new String(message.getPayload()); String[] parts = payload.split(","); double value = Double.parseDouble(parts[0]); long timestamp = Long.parseLong(parts[1]); // 创建InfluxDB数据点 Point point = Point.measurement(measurementName) .time(timestamp, java.util.concurrent.TimeUnit.MILLISECONDS) .addField("value", value) .build(); // 保存数据点到InfluxDB BatchPoints batchPoints = BatchPoints.database(influxDbName) .point(point) .build(); influxDB.write(batchPoints); } }); } } ``` 这个程序将订阅`sensor/data`主题,读取从传感器发送的数据,并将数据存到名为`test`的InfluxDB数据库的`sensor_data`测量

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值