ProcessDB实时/时序数据库——JAVA_API订阅实时数据

该代码示例展示了如何使用Java通过DBConnect和DBPoint类从数据库订阅并处理实时数据,包括根据点名称和点对象订阅,以及打印和解析不同数据类型的值。程序订阅了多个系统监控指标如CPU使用率和内存使用情况。
摘要由CSDN通过智能技术生成

一、根据点名称订阅实时数据

import java.text.SimpleDateFormat;
import java.util.Date;

import com.processdb.connection.DBConnect;
import com.processdb.connection.DBConnectManager;
import com.processdb.connection.DBPoint;
import com.processdb.driver.common.ConnectInfo;
import com.processdb.driver.common.ConstantValue;
import com.processdb.driver.dao.DBRealtimeDataDao;
import com.processdb.exception.DBException;

public class SubscribeRealtimeDataByNameTest {
    private static int i=0;
    SimpleDateFormat dateFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public SubscribeRealtimeDataByNameTest() {
    }
    public int testSubcribeRealtimeData(DBConnect dbConn, String pointNameArray[])
    {
        try {
            Date ct = new Date(System.currentTimeMillis());
            System.out.println("========================================");
            System.out.println("CurrentTime: " + dateFmt.format(ct));
            System.out.println("----------------------------------------");
            for(int i=0; i<pointNameArray.length; i++) {
                DBPoint point = dbConn.getPointByGlobalName(pointNameArray[i]);
                String valueStr = null;
                //根据数据类型取出值
                switch(point.getDataType())
                {
                case ConstantValue.TAG_TYPE_DIGITAL:
                    valueStr = "" + point.getDigital();
                    break;
                case ConstantValue.TAG_TYPE_FLOAT32:
                    valueStr = "" + point.getFloat32();
                    break;
                case ConstantValue.TAG_TYPE_FLOAT64:
                    valueStr = "" + point.getFloat64();
                    break;
                case ConstantValue.TAG_TYPE_BOOL:
                case ConstantValue.TAG_TYPE_UINT8:
                case ConstantValue.TAG_TYPE_INT8:
                    valueStr = "" + point.getInt8();
                    break;
                case ConstantValue.TAG_TYPE_UINT16:
                case ConstantValue.TAG_TYPE_INT16:
                    valueStr = "" + point.getInt16();
                    break;
                case ConstantValue.TAG_TYPE_UINT32:
                case ConstantValue.TAG_TYPE_INT32:
                    valueStr = "" + point.getInt32();
                    break;
                case ConstantValue.TAG_TYPE_UINT64:
                case ConstantValue.TAG_TYPE_INT64:
                case ConstantValue.TAG_TYPE_TIME:
                    valueStr = "" + point.getInt64();
                    break;
                case ConstantValue.TAG_TYPE_STRING:
                    valueStr = point.getString();
                    break;
                case ConstantValue.TAG_TYPE_BLOB:
                    valueStr = point.getBlobHex();
                    break;
                }
                System.out.println(i + " " + point.getGlobalName() + ": " + valueStr);
            }
            System.out.println("----------------------------------------");
        } catch (Exception e1) {
            e1.printStackTrace();
        }

        return 1;
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        //建立实时库链接
        ConnectInfo host = new ConnectInfo();
        host.setConnectName("testConn");    //链接名称
        host.setHostName("127.0.0.1");        //实时库所在服务器的IP地址
        host.setHostPort(8301);                //实时库程序端口号
        host.setPassword("root");            //登录实时库的用户名
        host.setUserName("root");            //登录实时库的密码
        DBConnect myConn = null;
        try {
            myConn = DBConnectManager.getInstance().getConnect(host);    //建立链接
        } catch (DBException e1) {
            e1.printStackTrace();
        }
        
        SubscribeRealtimeDataByNameTest tester = new SubscribeRealtimeDataByNameTest();

        //初始化订阅列表
        String pointNameArray[] = {"PUBLIC.SYS.PDB_OS_CPU_USAGE","PUBLIC.SYS.PDB_OS_MEM_USAGE",
                "PUBLIC.SYS.PDB_DISK_READ_SPEED","PUBLIC.SYS.PDB_DISK_WRITE_SPEED",
                "PUBLIC.SYS.PDB_PROC_CPU_USAGE","PUBLIC.SYS.PDB_PROC_MEM_USED",
                "PUBLIC.SYS.PDB_FREE_DISK"};

        try {
            //订阅实时数据
            int res = DBRealtimeDataDao.subcribeRealdataByName(myConn, pointNameArray);
            if(res != 0)
            {
                return;
            }
        } catch (DBException e1) {
            e1.printStackTrace();
        }
        //循环打印订阅实时数据
        while(true)
        {
            try{
                while(i<1000000000)
                {
                    //打印点的实时值
                    tester.testSubcribeRealtimeData(myConn,pointNameArray);
                    
                    Thread.sleep(1000);
                    i++;
                }
                System.exit(0);
            }catch (InterruptedException e) {}
        }
    }    
}

运行结果:

========================================
CurrentTime: 2023-02-11 14:11:53
----------------------------------------
0 PUBLIC.SYS.PDB_OS_CPU_USAGE: 27.828382
1 PUBLIC.SYS.PDB_OS_MEM_USAGE: 83.0
2 PUBLIC.SYS.PDB_DISK_READ_SPEED: 0.0
3 PUBLIC.SYS.PDB_DISK_WRITE_SPEED: 0.0
4 PUBLIC.SYS.PDB_PROC_CPU_USAGE: 0.0
5 PUBLIC.SYS.PDB_PROC_MEM_USED: 402.0
6 PUBLIC.SYS.PDB_FREE_DISK: 105574
----------------------------------------

二、根据点对象订阅实时数据

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;

import com.processdb.connection.DBConnect;
import com.processdb.connection.DBConnectManager;
import com.processdb.connection.DBPoint;
import com.processdb.connection.DBRoot;
import com.processdb.connection.DBTable;
import com.processdb.driver.common.ConnectInfo;
import com.processdb.driver.common.ConstantValue;
import com.processdb.driver.dao.DBRealtimeDataDao;
import com.processdb.exception.DBException;
 
public class SubscribeRealtimeDataByDBPointTest {

    //private static OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();

    private static int i=0;
    SimpleDateFormat dateFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public SubscribeRealtimeDataByDBPointTest() {
    }
    public int testSubcribeRealtimeData(DBConnect dbConn, Vector<DBPoint> pointList)
    {
        try {
            //DBRealtimeDataDao.queryPointRealdata(dbConn, pointList);
            Date ct = new Date(System.currentTimeMillis());
            System.out.println("========================================");
            System.out.println("CurrentTime: " + dateFmt.format(ct));
            System.out.println("----------------------------------------");
            for(int i=0; i<pointList.size(); i++) {
                DBPoint point = (DBPoint)pointList.elementAt(i);
                String valueStr = null;
                switch(point.getDataType())
                {
                case ConstantValue.TAG_TYPE_DIGITAL:
                    valueStr = "" + point.getDigital();
                    break;
                case ConstantValue.TAG_TYPE_FLOAT32:
                    valueStr = "" + point.getFloat32();
                    break;
                case ConstantValue.TAG_TYPE_FLOAT64:
                    valueStr = "" + point.getFloat64();
                    break;
                case ConstantValue.TAG_TYPE_BOOL:
                case ConstantValue.TAG_TYPE_UINT8:
                case ConstantValue.TAG_TYPE_INT8:
                    valueStr = "" + point.getInt8();
                    break;
                case ConstantValue.TAG_TYPE_UINT16:
                case ConstantValue.TAG_TYPE_INT16:
                    valueStr = "" + point.getInt16();
                    break;
                case ConstantValue.TAG_TYPE_UINT32:
                case ConstantValue.TAG_TYPE_INT32:
                    valueStr = "" + point.getInt32();
                    break;
                case ConstantValue.TAG_TYPE_UINT64:
                case ConstantValue.TAG_TYPE_INT64:
                case ConstantValue.TAG_TYPE_TIME:
                    valueStr = "" + point.getInt64();
                    break;
                case ConstantValue.TAG_TYPE_STRING:
                    valueStr = point.getString();
                    break;
                case ConstantValue.TAG_TYPE_BLOB:
                    valueStr = point.getBlobHex();
                    break;
                }
                System.out.println(i + " " + point.getGlobalName() + ": " + valueStr);
            }
            System.out.println("----------------------------------------");
        } catch (Exception e1) {
            e1.printStackTrace();
        }
//      double usedMem = (double)(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())/1048576;
//
//        double totalvirtualMemory = osmxb.getTotalPhysicalMemorySize();
//        double freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize();
//        double usedMemory = totalvirtualMemory - freePhysicalMemorySize;
//        System.out.println(i + " used mem: " + usedMem + "M");

        return 1;
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        //建立实时库链接
        ConnectInfo host = new ConnectInfo();
        host.setConnectName("testConn");    //链接名称
        host.setHostName("127.0.0.1");        //实时库所在服务器的IP地址
        host.setHostPort(8301);                //实时库程序端口号
        host.setPassword("root");            //登录实时库的用户名
        host.setUserName("root");            //登录实时库的密码
        DBConnect myConn = null;
        try {
            myConn = DBConnectManager.getInstance().getConnect(host);    //建立链接
        } catch (DBException e1) {
            e1.printStackTrace();
        }
        
        SubscribeRealtimeDataByDBPointTest tester = new SubscribeRealtimeDataByDBPointTest();

        Vector<DBPoint> pointList = new Vector<DBPoint>();
//        String pname1[] = {"PUBLIC.SYS.PDB_OS_CPU_USAGE","PUBLIC.SYS.PDB_OS_MEM_USAGE",
//                "PUBLIC.SYS.PDB_DISK_READ_SPEED","PUBLIC.SYS.PDB_DISK_WRITE_SPEED",
//                "PUBLIC.SYS.PDB_PROC_CPU_USAGE","PUBLIC.SYS.PDB_PROC_MEM_USED","PUBLIC.SYS.PDB_FREE_DISK"};
//        pointList.clear();
//        for(int i=0; i<pname1.length; i++) {
//            DBPoint dbpoint11 = dbConn.getPointByGlobalName(pname1[i]);
//            if(dbpoint11 != null) pointList.add(dbpoint11);
//        }
        //指定表
        DBRoot root = DBRoot.getInstance(myConn);
        DBTable table = root.getCachedDatabaseByName("PUBLIC").getCachedTableByName("SYS");
        Vector<DBPoint> pointList1 = table.getCachedPoints();
        for (int k = 0; k < pointList1.size(); k++) {
            pointList.add(pointList1.get(k));
        }

        try {
            //订阅实时数据
            int res = DBRealtimeDataDao.subcribeRealdataByDBPoint(myConn, pointList1);
            if(res != 0)
            {
                return;
            }
        } catch (DBException e1) {
            e1.printStackTrace();
        }

        //循环打印订阅实时数据
        while(true)
        {
            try{
                while(i<1000000000)
                {
                    //打印点的实时值
                    tester.testSubcribeRealtimeData(myConn,pointList);
                    
                    Thread.sleep(1000);
                    i++;
                }
                System.exit(0);
            }catch (InterruptedException e) {}
        }
    }    
}

运行结果:

========================================
CurrentTime: 2023-02-11 14:12:42
----------------------------------------
0 PUBLIC.SYS.PDB_PROC_RUNNING_TIME: 19006.0
1 PUBLIC.SYS.PDB_PROC_CPU_USAGE: 0.0
2 PUBLIC.SYS.PDB_OS_TYPE: null
3 PUBLIC.SYS.PDB_NET_WRITE_SPEED: 0.0
4 PUBLIC.SYS.PDB_FREE_DISK: 105574
5 PUBLIC.SYS.PDB_PROC_MEM_USED: 201.0
6 PUBLIC.SYS.PDB_AVAILABLE_DISK: 105574
7 PUBLIC.SYS.PDB_DISK_READ_SPEED: 0.0
8 PUBLIC.SYS.PDB_OS_RUNNING_TIME: 316.77222
9 PUBLIC.SYS.PDB_PROC_THREAD_COUNT: 122
10 PUBLIC.SYS.PDB_DISK_WRITE_SPEED: 0.0
11 PUBLIC.SYS.PDB_NET_READ_SPEED: 0.0
12 PUBLIC.SYS.PDB_HANDLE_COUNT: 677
13 PUBLIC.SYS.PDB_OS_CPU_USAGE: 19.590883
14 PUBLIC.SYS.PDB_OS_MEM_USAGE: 80.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值