14.2. 事件转换的常见用例


EventTransform 允许您根据系统要求以不同的方式操作和重塑事件。最常见的用例如下:

14.2.1. 字段提取

您可以从事件有效负载中提取特定字段,并将其公开为 CloudEvent 属性。这样可以更轻松地过滤和路由下游事件。

从事件有效负载提取用户 ID 的示例

apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
  name: extract-user-id
spec:
  jsonata:
    expression: |
      {
        "specversion": "1.0",
        "id": id,
        "type": "user.extracted",
        "source": "transform.user-extractor",
        "time": time,
        "userid": data.user.id,
        "data": $
      }
Copy to Clipboard Toggle word wrap

14.2.2. 事件格式转换

您可以将事件的结构转换为不同的格式,以便保持与不同消费者系统兼容的。

将订单事件转换为以客户为中心的格式的示例

apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
  name: format-converter
spec:
  sink:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: destination-service
  jsonata:
    expression: |
      {
        "specversion": "1.0",
        "id": id,
        "type": "order.converted",
        "source": "transform.format-converter",
        "time": time,
        "data": {
          "orderId": data.id,
          "customer": {
            "name": data.user.fullName,
            "email": data.user.email
          },
          "items": data.items
        }
      }
Copy to Clipboard Toggle word wrap

14.2.3. 事件增强

您可以将固定或动态元数据(如环境或区域)添加到事件,而无需更改原始制作者。

在事件中添加环境和区域元数据的示例

apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
  name: event-enricher
spec:
  jsonata:
    expression: |
      {
        "specversion": "1.0",
        "id": id,                     /* Add the "id", "type", "source", and "time" attributes based on the input JSON object fields */
        "type": type,
        "source": source,
        "time": time,
        "environment": "production",  /* Add fixed environment and region attributes to the event metadata */
        "region": "us-west-1",
        "data": $                     /* Add the event transform input JSON body as CloudEvent "data" field */
      }
Copy to Clipboard Toggle word wrap

14.2.4. 事件响应回复转换

您只能转换发送到 sink 的请求,以及从 sink 接收的响应,启用端到端事件 shaping。

转换请求和回复消息的示例

apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
  name: request-reply-transform
spec:
  sink:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: processor-service
  jsonata:
    expression: |
      # Request transformation
      {
        "specversion": "1.0",
        "id": id,
        "type": "request.transformed",
        "source": source,
        "time": time,
        "data": data
      }
  reply:
    jsonata:
      expression: |
        # Reply transformation
        {
          "specversion": "1.0",
          "id": id,
          "type": "reply.transformed",
          "source": "transform.reply-processor",
          "time": time,
          "data": data
        }
Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat