14.3. 用于事件转换的部署模式


您可以根据您的架构需求,在您的事件流中使用 EventTransform。支持以下模式:

14.3.1. Source 到 Broker 事件转换

您可以将事件从 Source 路由到 EventTransform 资源,应用转换逻辑,然后将它们转发到代理,以便只有规范化或增强的事件被路由以供使用。

您可以将 ApiServerSource 资源配置为将事件发送到 EventTransform 资源,然后转换它们并将其路由到默认 Broker,如下例所示:

apiVersion: sources.knative.dev/v1
kind: ApiServerSource
metadata:
  name: k8s-events
spec:
  serviceAccountName: event-watcher
  resources:
    - apiVersion: v1
      kind: Event
  sink:
    ref:
      apiVersion: eventing.knative.dev/v1alpha1
      kind: EventTransform
      name: event-transformer
---
apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
  name: event-transformer
spec:
  sink:
    ref:
      apiVersion: eventing.knative.dev/v1
      kind: Broker
      name: default
  jsonata:
    expression: |
      # transformation expression
Copy to Clipboard Toggle word wrap

14.3.2. 触发器到服务事件转换

您可以通过 Broker Trigger EventTransform Service 或 Sink 来路由事件。Broker 接收所有事件,Trigger 根据属性过滤它们,EventTransform 资源重塑或增强过滤的事件,Service 或 Sink 处理结果。

您可以在不更改原始生产者或影响其他订阅者的情况下为特定消费者定制事件。由于转换仅在过滤后应用,因此只有相关事件会被重塑,这可以提高效率并减少不必要的处理。

您可以过滤类型为 original.event.type 的事件,将它们路由到 EventTransform,并将转换的事件发送到具有此配置的服务。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: transform-trigger
spec:
  broker: default
  filter:
    attributes:
      type: original.event.type
  subscriber:
    ref:
      apiVersion: eventing.knative.dev/v1alpha1
      kind: EventTransform
      name: event-transformer
---
apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
  name: event-transformer
spec:
  sink:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: destination-service
  jsonata:
    expression: |
      # transformation expression
Copy to Clipboard Toggle word wrap

14.3.3. 代理回复事件转换

您可以在没有 sink 的情况下配置 EventTransform,将事件重新发布到 Broker,在其中可路由到额外的 Triggers 或消费者。

注意

使用 Broker 回复功能时,请确保转换的事件与调用 EventTransform 的同一 Trigger 不匹配。否则,您面临造成无限事件循环的风险。

您可以使用 Trigger 过滤类型为 original.event.type 的事件,使用 EventTransform 转换它们,并将其重新发布到 Broker 中作为 transformed.event.type 类型。更新 type 或 another 属性会将事件路由到不同的 Triggers,而无需由同一 Trigger 重新处理。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: transform-trigger
spec:
  broker: default
  filter:
    attributes:
      type: original.event.type
  subscriber:
    ref:
      apiVersion: eventing.knative.dev/v1alpha1
      kind: EventTransform
      name: event-transformer
---
apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
  name: event-transformer
spec:
  # No sink specified - reply to Broker
  jsonata:
    expression: |
      {
        "specversion": "1.0",
        "id": id,
        "time": time,
        "type": "transformed.event.type",
        "source": "transform.event-transformer",
        "data": $
      }
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat