설명
- 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))
}