首页 > 编程知识 正文

java可以做物联网开发吗,云计算开源框架

时间:2023-05-03 05:40:55 阅读:25631 作者:759

基于java的多设备类型物联网体系结构的实现

前言:从19年11月开始,从【金融】行业进入【物联网】。 路是封锁,我一个人摸索着前进,但学到了很多新东西。 我给了你很多高清DP。 在此感谢大家。

以下是一些经验的分享,希望对有需要的朋友有帮助。

1、体系结构思路

很久以来,我一直想用springboot mysql实现。 由于熟悉此框架,可以将机械开发工作量减少70%,因此今后更改springcloud也很有用(请注意逻辑实现)。 否则工作量会变大)。

可以说物联网和互联网有共同点,但也有很多不同的东西。

首先要说协议,互联网大多是https或http,但物联网不仅仅是这两种协议,还有UDP协议、TCP协议。

放入干货:

环境: java mysql redis rabbitMQ Mqtt

图解:

这是比较简单的逻辑图,里面的复杂逻辑还是说不出口。

这涉及几个问题。 很多物品的网络设备终端都有心率,活动数据会上升。 怎么保证同时性? 入住的数据是唯一的吗? 如何上传多个设备的数据? 怎么管理? 多个第三方服务如何分发数据?

让我说几句:

1、根据协议分析数据

终端上行数据有433协议、蓝牙、zigbee、tcp、http,还有第一代、第二代、第三代等协议。 我用了一个愚蠢的方法。 按协议解析,存储在不同的表中

我把整个枚举类集中起来存储不同的类型,用分析方法中唯一的上行数据进行区分(我以为上行数据是十六进制)

h0f 22 aebb 820001100020001 bb 23 AABB 8637

“HH0F”是a协议特有的字符,它位于a协议库中。

a协议专用于a设备,其建设表是这样的

a _ tag ————335433543354设备表

a _ data ————335433543354设备数据表

a _ gateway ——3354335433543354网关表

问题是,如果10种设备不能有30个表呢?

我知道有人上过物联网,但根据机器的种类不同,所拥有的属性也不同,可能有三种机器。

电量、数据包顺序、特征值

但是,根据机器的不同,可能还有更多的东西。 例如:

电量、包序、心率、呼吸、体温、动态值。

data表中的数据不能爆炸吗? ——仔细想想,也只是考虑了通用现场存储,data1~data20

多设备类型暂时解决了,以后怎么具体操作?

2、如何避免数据重复

在上图中,我们采用了两项服务。 一种是接受服务,另一种是处理服务的具体处理方法。

收到服务后,收到的数据在base64编码后直接发送到消息队列(rabbitMQ ),处理服务监听rabbitMQ消息并前往解析服务。 就这么简单!

但是,有一个,rabbitMQ会打开ack模式! 然后可以在负荷下做这个步骤!

问题2 )设备越多,同时也会出现问题。 我该怎么办?

Semaphore这是个好东西

来一个数据后插入。 任何数据库都受不了。 然后,批量插入。

//--------数据批量入库开始

私有状态列表tnnobjectsavedo=new ArrayList (;

私有状态持续时间=0l;

//私有静态int count send=0;

隐私声明模板=新模板(1;

@Override

公共语音音频(nndatanndata ) {

try {

semaphoreNnData.acquire (;

if(starttimenndata==0L ) {

starttimenndata=system.current time millis (;

}

listnnobjectsavedo.add(nndata;

if (system.current time millis (-starttimenndata 2000 ) )

ListlistSaveDOOne=new ArrayList (;

listsavedoone.addall (listnnobjectsavedo;

asyncinsertbatch(listsavedoone;

listNnObjectSaveDO.clear (;

startTimeNnData=0L;

}

}catch(exceptione ) {

e .打印堆栈跟踪(;

} finally {

semaphoreNnData.release (;

}

}

@Async

私密性语音同步服务batch {

this.insert batch (列表;

//countSend=countSend list.size (;

//system.out.println ('==================入库数据数量: ' countSend );

}

//--------数据批量入库结束

我做过测试。 这样的方法远远超过了2000瓶/秒。 眼前的朋友在看。

system.current time millis (-starttimenndata 2000//2秒批量签入一次

到这里来一会儿,以后我想我会再补充的!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。