事件总线
概述
Beaver IoT 平台提供了事件总线,用于在系统内部各个服务、集成之间进行通信,开发者可以通过订阅事件来实现自己的业务逻辑。平台事件总线支持基于Key表达式的事件订阅,以支持更细粒度的订阅。 当前平台支持的事件类型有:设备事件、实体事件、实体值数据交换事件(Exchange)。前两者一般不需要开发者去发送,当设备或者实体更新时系统会自动发送,如果集成对相关事情感兴趣,可以直接订阅相关事件即可。
事件定义
Event 事件
Beaver IoT的某些资源发生变化时,会触发相关的事件Event
,订阅这些事件的处理方法就会被触发,这是整个系统运行的基础。
事件分为: 设备事件DeviceEvent
/ 实体事件EntityEvent
/ 实体值数据交换事件ExchangeEvent
DeviceEvent
表示设备元数据相关事件,事件的类型(DeviceEvent.EventType
)有:创建CREATED
/ 更新UPDATED
/ 删除DELETED
。这个事件会携带发生变化的设备。这个事件在保存设备元数据时会自动触发,一般不需要集成开发者发送事件。
DeviceEvent对应的Payload为Device
对象。
EntityEvent
表示实体元数据相关事件,事件的类型(EntityEvent.EventType
)有:创建CREATED
/ 更新UPDATED
/ 删除DELETED
。这个事件会携带发生变化的实体。这个事件在保存实体元数 据时会自动触发,一般不需要集成开发者发送事件。
EntityEvent对应的Payload为Entity
对象。
ExchangeEvent
表示实体值数据相关事件,事件的类型(ExchangeEvent.EventType
)有:
- 服务调用
CALL_SERVICE
- 属性更新
UPDATE_PROPERTY
- 事件上报
REPORT_EVENT
- 其它发送方的自定义类型
ExchangeEvent的Payload为ExchangePayload
对象,如果Payload是采用注解方式定义的实体,那么这个实体类需要继承自ExchangePayload
。
ExchangeEvent Payload
ExchangePayload
ExchangePayload是ExchangeEvent事件的载荷,用于携带实体上下行的数据,ExchangePayload在Beaver IoT平台中广泛应用。ExchangePayload是一个Map结构,其中包含了Exchange事件的Key-Value数据,Key是一个字符串,Value是一个Object对象。另外包含了Context上下文对象,用于携带在Exchange过程中额外需要的参数信息。
ExchangePayload的构建
- 方式1
- 方式2
- 方式3
- 方式4
构建单一值的ExchangePayload
ExchangePayload payload = ExchangePayload.create(key, value);
构建多值的ExchangePayload(传递Map)
ExchangePayload payload = ExchangePayload.create(Map.of("key1", value1));