基于微服务架构的简单的IOT系统

本文介绍了一种基于PowerDesigner设计的IOT系统结构,主要包括设备管理服务、消息调度服务、历史记录服务、大屏展示服务等部分。系统支持MQTT、MQ等多种通讯协议,并通过中转服务器进行数据转换与调度。

最近要配合MES采集和控制数控设备,又不想把这功能集成在MES中,另外也是为了提高扩展性,于是就用PowerDesigner设计了系统结构图,简单画了一下类图,经过初步研究,觉得可行,就动手。

系统组成部分:

1、设备管理服务,管理系统中的设备数据,若未在此服务中注册的设备,消息调度服务将丢弃消息;当终端采集程序有更新,将通过MQ下发更新消息,终端设备自动更新程序并重启应用新的程序。此服务订阅

2、消息调度服务,所有设备的消息均发送到此服务,数据接入接口采用插件式方式接入,目前支持MQTT和MQ两种协议,内置一个MQTT服务,向内部应用服务接收到设备的消息,可扩展应用,例如历史记录、大屏展示两个微服务,各自独立,互不干扰,可将来扩展应用。

设备消息进入到调度服务后,经过简单处理和过滤,在内部MQTT服务器发送标准格式的消息,其Topic定义为 DeviceMessage/{DeviceType}/{DeviceID},对于不同的具体应用,可以定制模拟接收不同范围的设备数据,例如对某一中设备类型D001,则接收DeviceMessage/D001/+这样就可以接收此设备类型下的所有数据。

调度器内部开启了一个设备状态缓存器,当超过10秒(可配置)未收到设备上传的消息,则判定设备离线。当设备状态发生变化,将通过调度器发送设备状态变化的消息。缓存使用框架自带的CYBMemoryCache类实现,例如 cache.Set(deviceId,status,TimeSpan.FromSeconds(10),(key,value,reason)=>{//在此发送超时消息}),其中key是deviceId,value是status,reason是该key从缓存中移除的原因,包括使用代码主动移除,被替换,超时移除。原来框架使用的是微软自带的MemoryCache类,但是使用起来比较复杂,且超时消息是被动触发,使用也复杂,因此自己写了个这么类。

3、历史记录服务,所有接入的设备消息,自动记录到Mongo数据库中,且提供API接口查询历史记录。设备

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值