Repository navigation
Expand file tree
/
Copy pathmain.go
More file actions
68 lines (56 loc) · 1.39 KB
/
Copy pathmain.go
File metadata and controls
68 lines (56 loc) · 1.39 KB
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
package main
import (
"context"
"log"
"os"
"github.com/ThreeDotsLabs/watermill"
"github.com/ThreeDotsLabs/watermill-nats/pkg/nats"
"github.com/ThreeDotsLabs/watermill/message"
"github.com/ThreeDotsLabs/watermill/message/router/middleware"
"github.com/nats-io/stan.go"
)
func main() {
natsURL := os.Getenv("NATS_URL")
clusterID := os.Getenv("NATS_CLUSTER_ID")
topic := os.Getenv("NATS_TOPIC")
err := startSubscriber(natsURL, clusterID, topic)
if err != nil {
log.Fatal(err)
}
}
func startSubscriber(natsURL, clusterID, topic string) error {
logger := watermill.NewStdLogger(false, false)
router, err := message.NewRouter(message.RouterConfig{}, logger)
if err != nil {
return err
}
subscriber, err := nats.NewStreamingSubscriber(
nats.StreamingSubscriberConfig{
ClusterID: clusterID,
ClientID: "subscriber",
QueueGroup: "example-group",
DurableName: "example-durable",
StanOptions: []stan.Option{
stan.NatsURL(natsURL),
},
Unmarshaler: nats.GobMarshaler{},
},
logger,
)
if err != nil {
return err
}
router.AddMiddleware(middleware.Recoverer)
router.AddNoPublisherHandler(
"messages_handler",
topic,
subscriber,
handler,
)
log.Print("Subscribed for messages")
return router.Run(context.Background())
}
func handler(msg *message.Message) error {
log.Printf("received message: %s, payload: %s", msg.UUID, string(msg.Payload))
return nil
}