观察者模式要做的是:
- 主题对象确认触发通知的时机
- 通知的消息格式
- 观察者如何响应
对外体现的就是一个事件驱动系统,
规则引擎有类似之处,不过规则引擎是在多个进程间通讯,而不是单个进程
是否能够统一接口支持单体应用和分布式应用,
如果没有过程触发,仅仅是边沿触发,
规则引擎就是无状态的,那么可以集群部署,多个应用间是独立的,
但是关键是消息不能传递给多个集群应用,如 A、B、C3个应用都在运行,那么事件触发后只能3选1,
规则引擎是一个处理程序,它的执行动作是带状态的,所以不适合集群部署
这个可以使用消息队列的单播功能来实现,
如果是过程触发,每个规则引擎内部相当于存储了一个业务对象的状态数据库,
那么应该使用主备模式
===============
- 集群,消息只能给一个应用,集群的意义是否存在
- 主备,消息也是只能给一个应用
- 区别在于主备需要保存业务对象状态,
是否需要将消息的传递和规则的执行拆分
==============================
业务对象可以监测那些数据项:
- 业务原始数据,如电力监测的36个原始数据项
- 统计数据,每分钟、每小时、每天、每月的电量/功率 汇总数据
- 过程数据连续N分钟、N小时、N天的数据
1是数据的源头,
2是基于1的统计分析,是另一个应用分析产生的
3是1的数据汇总,是由业务应用方决定的,
updated 2020-09-25
-
条件分为:可检测的数据项(字段)和 可拦截的逻辑(方法)
这两者都依赖于具体业务对象,
-
所以界面先选择业务对象,再选择条件,再选择动作
-
业务对象的选择就是搜索器,如下,
先选择要操作的业务对象,如 设备(Device),用户(User),机构(Org)
在选择业务对象的范围,如任意设备(Any),南京市的所有设备( 范围选择),单一设备(设备id为1,设备名称为XXX)
最后选择可观测的数据项还是方法:
-
数据项:温度、湿度
-
方法:新建前,更新后
-
满足条件,则执行动作
-
条件是在哪定义的?条件组合(or ,and )?条件嵌套? 实际上和之前的筛选器条件的概念是类似的
也是需要区分业务对象的,是设备,还是单元,还是账号?
但是比筛选器条件多出来的是,不仅仅档案上属性是可以做为条件的配置项,如名称,状态 更多的是事件,如当设备状态由A变成B时,当温度数据>100时
这里我的想法所有数据产生的地方都写入mq,经由mq处理(设计好接口,可以方便的由mq换成其他处理方式):
-
档案类 在每一个保存/新增方法上做切面,当变化时,写入mq
-
数据类 数据处理的服务里,写入mq
-