Event Registry 简介
什么是 Event Registry?
Event Registry 引擎允许从任何来源发送和接收事件(开箱即用地支持 JMS、Kafka、RabbitMQ 以及通过 HTTP 接收事件),并在 CMMN 和 BPMN 模型中使用这些事件。例如,可以从 JMS 队列接收事件,并为定义了监听此事件类型的启动事件的流程定义启动新的流程实例。或者从 Kafka topic 接收事件,并在与传入事件的关联定义匹配的特定流程实例中触发边界事件。CMMN 也有同样的可能性,即当接收到特定事件类型时启动新的案例实例,或触发特定案例实例的事件注册表监听器。需要配置两种类型的定义,即 Event 和 Channel 定义。
什么是 Event 定义
Event 定义除了标识事件类型的默认 key 和 name 属性之外,还定义传入或传出事件的事件载荷。事件载荷由 name 和 type 对象的数组定义,支持 string、integer、double 和 boolean 类型。事件定义的另一部分是关联参数属性,可以为其定义带有 name 和 type 的参数对象数组。这些关联参数值用于将传入事件匹配到案例或流程实例的事件订阅。下面是一个 Event 定义的 JSON 定义示例:
{
"key": "myEvent",
"name": "My event",
"correlationParameters": [
{
"name": "customerId",
"type": "string"
}
],
"payload": [
{
"name": "customerName",
"type": "string"
},
{
"name": "amount",
"type": "integer"
}
]
}
什么是 Channel 定义
Channel 定义除了标识通道类型的默认 key 和 name 属性之外,还定义传入或传出事件的目的地。目的地名称与一个类型值一起定义,该类型值指定要使用的适配器类型。开箱即用地支持 JMS、Kafka 和 RabbitMQ 适配器类型,但也可以添加其他适配器。对于 Channel 定义,通道类型可以是 inbound(传入事件)或 outbound(传出事件)。
对于 inbound 通道定义,需要定义事件 key 检测,它配置如何为传入事件确定事件 key。这可以是一个固定的事件类型值,或者事件 key 可以基于 JSON 字段值或 JSON 指针表达式来确定。类似地,可以为多租户 Flowable 环境定义租户 id 检测。这里也可以定义一个静态租户 id 值,或 JSON 字段值或 JSON 指针表达式。对于 inbound 通道定义还可以定义另一部分,即传入事件的反序列化方式。默认开箱即用地支持 JSON 和 XML 反序列化选项。
对于 outbound 通道定义,可以定义序列化器类型,支持 JSON 和 XML 值。下面是一个 inbound 通道 JSON 定义示例:
{
"key": "testChannel",
"category": "channel",
"name": "Test channel",
"channelType": "inbound",
"type": "jms",
"destination": "test-customer",
"deserializerType": "json",
"channelEventKeyDetection": {
"jsonField": "eventKeyValue"
}
}
此示例 inbound 通道定义连接到名为 test-customer 的 JMS 队列,传入事件将被反序列化为事件载荷的 JSON,事件 key 将基于传入事件载荷中的 eventKeyValue JSON 属性来确定。
下面是一个 outbound 通道 JSON 定义示例:
{
"key": "outboundCustomer",
"category": "channel",
"name": "Test channel",
"channelType": "outbound",
"type": "jms",
"destination": "outbound-customer",
"serializerType": "json"
}
此示例 outbound 通道定义连接到名为 outbound-customer 的 JMS 队列,传出事件将被序列化为 JSON 事件载荷。