Updated:

less than 1 minute read

설명

  • 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))
     }