[messaging] CloudEvents
Updated:
설명
- 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)) }