최대 1 분 소요

설명

  • https://cloudevents.io/
  • 일반적인 방식으로 이벤트 데이터를 설명하기 위한 사양
  • CNCF graduated projects
  • 다양한 언어의 SDK 제공
    • C#, Go, Java, Javascript/TypeScript, PHP, Python, Ruby, Rust
  • 서비스, 플랫폼 및 시스템 간의 상호 운용성을 제공
  • 일관성 있는 개발 환경 보장과 비즈니스 로직에 집중 가능
  • Argo Events, Azure Event Grid, Google Cloud Eventarc, …에서 사용


코드

  • send event
	package main

	import (
		"context"
		"log"

		cloudevents "github.com/cloudevents/sdk-go/v2"
	)

	func main() {
		client, err := cloudevents.NewClientHTTP()
		if err != nil {
			log.Fatalln(err)
		}

		event := cloudevents.NewEvent()
		event.SetID("id")
		event.SetSubject("subject")
		event.SetSource("uri")
		event.SetType("type")
		event.SetData(cloudevents.ApplicationJSON, map[string]string{"hello": "world"})

		ctx := cloudevents.ContextWithTarget(context.Background(), "http://localhost:10000/")

		result := client.Send(ctx, event)
		if cloudevents.IsACK(result) == false {
			log.Fatalf("send, fail %v", result)
		}
	}
  • receive event
	package main

	import (
		"context"
		"log"

		cloudevents "github.com/cloudevents/sdk-go/v2"
	)

	func receive(event cloudevents.Event) {
		log.Println(event.ID())
		log.Println(event.Subject())
		log.Println(event.Source())
		log.Println(event.SpecVersion())
		log.Println(event.Type())
		log.Println(event.Time())
		log.Println(event.DataContentType())
		log.Println(string(event.Data()))

		eventByte, err := event.MarshalJSON()
		if err != nil {
			log.Fatalln(err)
		}

		eventUnmarshal := cloudevents.NewEvent()
		err = eventUnmarshal.UnmarshalJSON(eventByte)
		if err != nil {
			log.Fatalln(err)
		}
		log.Println(eventUnmarshal)
	}

	func main() {
		client, err := cloudevents.NewClientHTTP(cloudevents.WithPort(10000))
		if err != nil {
			log.Fatalln(err)
		}
		log.Fatalln(client.StartReceiver(context.Background(), receive))
	}