Skip to content

Latest commit

 

History

History
114 lines (49 loc) · 3.05 KB

规则引擎2.md

File metadata and controls

114 lines (49 loc) · 3.05 KB

一 . 观察者模式

观察者模式要做的是:

  1. 主题对象确认触发通知的时机
  2. 通知的消息格式
  3. 观察者如何响应

对外体现的就是一个事件驱动系统,

规则引擎有类似之处,不过规则引擎是在多个进程间通讯,而不是单个进程

是否能够统一接口支持单体应用和分布式应用,

如果没有过程触发,仅仅是边沿触发,

规则引擎就是无状态的,那么可以集群部署,多个应用间是独立的,

但是关键是消息不能传递给多个集群应用,如 A、B、C3个应用都在运行,那么事件触发后只能3选1,

规则引擎是一个处理程序,它的执行动作是带状态的,所以不适合集群部署

这个可以使用消息队列的单播功能来实现,

如果是过程触发,每个规则引擎内部相当于存储了一个业务对象的状态数据库,

那么应该使用主备模式

===============

  1. 集群,消息只能给一个应用,集群的意义是否存在
  2. 主备,消息也是只能给一个应用
  3. 区别在于主备需要保存业务对象状态,

是否需要将消息的传递和规则的执行拆分

==============================

业务对象可以监测那些数据项:

  1. 业务原始数据,如电力监测的36个原始数据项
  2. 统计数据,每分钟、每小时、每天、每月的电量/功率 汇总数据
  3. 过程数据连续N分钟、N小时、N天的数据

1是数据的源头,

2是基于1的统计分析,是另一个应用分析产生的

3是1的数据汇总,是由业务应用方决定的,

updated 2020-09-25

  1. 条件分为:可检测的数据项(字段)和 可拦截的逻辑(方法)

    这两者都依赖于具体业务对象,

  2. 所以界面先选择业务对象,再选择条件,再选择动作

  3. 业务对象的选择就是搜索器,如下,

    先选择要操作的业务对象,如 设备(Device),用户(User),机构(Org)

    在选择业务对象的范围,如任意设备(Any),南京市的所有设备( 范围选择),单一设备(设备id为1,设备名称为XXX)

    最后选择可观测的数据项还是方法:

    1. 数据项:温度、湿度

    2. 方法:新建前,更新后

    3. 满足条件,则执行动作

    4. 条件是在哪定义的?条件组合(or ,and )?条件嵌套? 实际上和之前的筛选器条件的概念是类似的

    也是需要区分业务对象的,是设备,还是单元,还是账号?

    但是比筛选器条件多出来的是,不仅仅档案上属性是可以做为条件的配置项,如名称,状态 更多的是事件,如当设备状态由A变成B时,当温度数据>100时

    这里我的想法所有数据产生的地方都写入mq,经由mq处理(设计好接口,可以方便的由mq换成其他处理方式):

    1. 档案类 在每一个保存/新增方法上做切面,当变化时,写入mq

    2. 数据类 数据处理的服务里,写入mq