延迟
delay
组件:延迟组件。当消息的延迟期达到后,该消息将从挂起队列中删除,并通过成功链路(Success
)路由到下一个节点。
如果已经达到了最大挂起消息限制,则消息都会通过失败链路(Failure
)路由。如果overwrite为true,则消息会被覆盖,直到第一条消息被处理后,才会再次进入延迟队列。
用于在定时任务、调度、时间敏感、延迟执、削峰等操作。
一个延迟组件的例子
假设您有一个温度传感器,每秒向 RuleGo 发送一条遥测数据,包含温度值和时间戳。您想要在温度超过 30 度时触发一个警报,并在温度降到 25 度以下时清除警报。 但是,您不想要频繁地触发和清除警报,所以您设置了一个 10 秒的延迟时间,即只有在温度持续超过 30 度或持续低于 25 度 10 秒后才触发或清除警报。
这时候可以通过配置延迟组件:periodInSeconds=10
maxPendingMsgs=1
,实现该功能。
# 配置
字段 | 类型 | 说明 | 默认值 |
---|---|---|---|
periodInSeconds | int | 延迟时间,单位秒 | 60 |
maxPendingMsgs | int | 最大允许挂起消息的数量 | 1000 |
periodInSecondsPattern | int | 通过${metadataKey}方式从metadata变量中获取延迟时间,如果有值,优先取该值。 | 无 |
overwrite | bool | 是否覆盖周期内的消息。true:周期内只保留一条消息,新的消息会覆盖之前的消息。直到队列里的消息被处理后,才会再次进入延迟队。 | false |
# Relation Type
- Success: periodInSeconds时间过后,把消息发送到
Success
链 - Failure: 等待消息数量>maxPendingMsgs,把消息发送到
Failure
链
# 执行结果
无
# 配置示例
{
"id": "s1",
"type": "delay",
"name": "执行延迟组件",
"configuration": {
"periodInSeconds": 1,
"maxPendingMsgs": 1
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 应用示例
在 GitHub 上编辑此页 (opens new window)
上次更新: 2024/10/23, 10:13:01