5.7. 高级触发器过滤器
高级触发器过滤器为您提供了更精确的事件路由的高级选项。您可以根据完全匹配、前缀或后缀以及 CloudEvent 扩展过滤事件。通过这个添加的控制,可以更轻松地微调事件流如何确保只有相关事件触发特定的操作。
高级触发器过滤器功能只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
5.7.1. 高级触发器过滤器概述 复制链接链接已复制到粘贴板!
高级触发器过滤器功能添加新的 过滤器 字段,以与 CloudEvents Subscriptions API 中定义的过滤器 API 字段保持一致。您可以指定过滤器表达式,其中每个表达式评估为每个事件为 true 或 false。
以下示例显示了使用高级过滤器字段的触发器:
filters 字段包含一组过滤器表达式,每个过滤器表达式都评估为 true 或 false。如果任何表达式评估为 false,则事件不会发送到订阅者。每个过滤器表达式都使用特定的 dialect,它决定了过滤器的类型以及表达式中允许的额外属性集合。
5.7.2. 支持的过滤器描述 复制链接链接已复制到粘贴板!
您可以使用 dialects 为目标特定事件定义灵活的过滤器表达式。
高级触发器过滤器支持以下为匹配和过滤事件的不同方法的 dialects:
-
exact -
prefix -
suffix -
all -
any -
not -
cesql
每个 dialect 都提供了一种根据特定条件过滤事件的不同方法,为处理启用精确事件选择。
5.7.2.1. exact filter dialect 复制链接链接已复制到粘贴板!
通过比较 CloudEvent 属性的字符串值来准确过滤事件,使其与指定字符串完全匹配。比较区分大小写。如果属性不是字符串,则过滤器会将属性转换为字符串表示,然后再将其与指定的值进行比较。
确切的 过滤器 dialect 示例
5.7.2.2. prefix filter dialect 复制链接链接已复制到粘贴板!
前缀 dialect 过滤器事件通过比较以指定字符串开头的 CloudEvent 属性的字符串值。这种比较区分大小写。如果属性不是字符串,则过滤器会将属性转换为字符串表示,然后再将其与指定的值匹配。
前缀 过滤器 dialect 示例
5.7.2.3. 后缀 过滤器 dialect 复制链接链接已复制到粘贴板!
后缀 dialect 通过比较以指定字符串结尾的 CloudEvent 属性的字符串值来过滤事件。这种比较区分大小写。如果属性不是字符串,则过滤器会将属性转换为字符串表示,然后再将其匹配到指定的值。
后缀 过滤器 dialect 示例
5.7.2.4. 所有过滤器 dialect 复制链接链接已复制到粘贴板!
所有过滤器 dialect 需要所有嵌套过滤器表达式评估为 true 来处理事件。如果有任何嵌套表达式返回 false,则事件不会发送到订阅者。
所有过滤器 dialect 示例
5.7.2.5. 任何 过滤器 dialect 复制链接链接已复制到粘贴板!
任何 过滤器分离至少需要其中一个嵌套过滤器表达式来评估为 true。如果没有嵌套表达式返回 true,则事件不会发送到订阅者。
任何 过滤器 dialect 的示例
5.7.2.6. Not filter dialect 复制链接链接已复制到粘贴板!
not filter dialect 要求嵌套 过滤器表达式 评估为要处理的事件。如果嵌套表达式评估为 true,则事件不会发送到订阅者。
not filter dialect 示例
5.7.2.7. cesql 过滤器 dialect 复制链接链接已复制到粘贴板!
CloudEvents SQL 表达式(cesql)允许计算值以及与 CloudEvent 属性的匹配,这些表达式根据结构查询语言(SQL) WHERE 子句的语法调整。
cesql 过滤器 dialect 使用 CloudEvents SQL 表达式来过滤事件。提供的 CESQL 表达式必须评估为处理事件。
cesql 过滤器 dialect 的示例
有关 cesql 过滤器分离的语法和功能的更多信息,请参阅 CloudEvents SQL Expression Language。
5.7.3. 与现有过滤器字段冲突 复制链接链接已复制到粘贴板!
您可以同时 使用过滤器和 现有的 filter 字段。如果启用 new-trigger-filters 功能,并且对象同时包含 过滤器和过滤器,则 字段会覆盖。此设置允许您测试新 filters 的过滤器 字段,同时保持对现有过滤器的支持。您可以逐步将新字段引入现有的触发器对象。
过滤器 字段覆盖 filter 字段示例:
5.7.4. 传统属性过滤器 复制链接链接已复制到粘贴板!
传统属性过滤器对任意数量的 CloudEvents 属性启用完全匹配过滤,包括扩展。其功能反映了确切的过滤器分离,我们建议尽可能过渡到确切的过滤器。但是,为了向后兼容,属性过滤器仍可用。
以下示例演示了如何过滤 default 代理中的事件,该代理与 type 属性 dev.knative.foo.bar 匹配,且扩展 myextension 带有 my-extension-value 值:
使用特定属性过滤事件示例
当同时指定了 filters 字段和旧的 filter 字段时,filters 字段具有优先权。
例如,在以下示例配置中,会发送带有 dev.knative.a 类型的事件,而带有 dev.knative.b 类型的事件将被忽略: