-
Notifications
You must be signed in to change notification settings - Fork 217
/
main.go
69 lines (56 loc) · 1.7 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/cloudevents/sdk-go/pkg/cloudevents"
"github.com/cloudevents/sdk-go/pkg/cloudevents/client"
cloudeventsnats "github.com/cloudevents/sdk-go/pkg/cloudevents/transport/nats"
"github.com/kelseyhightower/envconfig"
)
type envConfig struct {
// NATSServer URL to connect to the nats server.
NATSServer string `envconfig:"NATS_SERVER" default:"http://localhost:4222" required:"true"`
// Subject is the nats subject to subscribe for cloudevents on.
Subject string `envconfig:"SUBJECT" default:"sample" required:"true"`
}
func main() {
var env envConfig
if err := envconfig.Process("", &env); err != nil {
log.Printf("[ERROR] Failed to process env var: %s", err)
os.Exit(1)
}
os.Exit(_main(os.Args[1:], env))
}
type Example struct {
Sequence int `json:"id"`
Message string `json:"message"`
}
func receive(ctx context.Context, event cloudevents.Event, resp *cloudevents.EventResponse) error {
fmt.Printf("Got Event Context: %+v\n", event.Context)
data := &Example{}
if err := event.DataAs(data); err != nil {
fmt.Printf("Got Data Error: %s\n", err.Error())
}
fmt.Printf("Got Data: %+v\n", data)
fmt.Printf("----------------------------\n")
return nil
}
func _main(args []string, env envConfig) int {
ctx := context.Background()
t, err := cloudeventsnats.New(env.NATSServer, env.Subject)
if err != nil {
log.Fatalf("failed to create nats transport, %s", err.Error())
}
c, err := client.New(t)
if err != nil {
log.Fatalf("failed to create client, %s", err.Error())
}
if err := c.StartReceiver(ctx, receive); err != nil {
log.Fatalf("failed to start nats receiver, %s", err.Error())
}
// Wait until done.
<-ctx.Done()
return 0
}