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": $
}
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
}
}
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 */
}
14.2.4. 이벤트 응답 응답 변환 링크 복사링크가 클립보드에 복사되었습니다!
싱크로 전송된 요청뿐만 아니라 싱크에서 수신된 응답을 변환하여 엔드 투 엔드 이벤트 셰이핑을 활성화할 수 있습니다.
요청 및 응답 메시지 둘 다 변환의 예
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
}