An experimental pub/sub client and server project.
1package main
2
3import (
4 "context"
5 "fmt"
6 "log/slog"
7
8 "github.com/willdot/messagebroker"
9 "github.com/willdot/messagebroker/pubsub"
10 "github.com/willdot/messagebroker/server"
11)
12
13func main() {
14 server, err := server.New(context.Background(), ":3000")
15 if err != nil {
16 panic(err)
17 }
18 defer server.Shutdown()
19
20 go sendMessages()
21
22 sub, err := pubsub.NewSubscriber(":3000")
23 if err != nil {
24 panic(err)
25 }
26 defer sub.Close()
27
28 sub.SubscribeToTopics([]string{"topic a"})
29
30 consumer := sub.Consume(context.Background())
31 if consumer.Err != nil {
32 panic(err)
33 }
34
35 for msg := range consumer.Messages() {
36 slog.Info("received message", "message", string(msg.Data))
37 }
38
39}
40
41func sendMessages() {
42 publisher, err := pubsub.NewPublisher("localhost:3000")
43 if err != nil {
44 panic(err)
45 }
46 defer publisher.Close()
47
48 // send some messages
49 i := 0
50 for {
51 i++
52 msg := messagebroker.Message{
53 Topic: "topic a",
54 Data: []byte(fmt.Sprintf("message %d", i)),
55 }
56
57 err = publisher.PublishMessage(msg)
58 if err != nil {
59 slog.Error("failed to publish message", "error", err)
60 continue
61 }
62 }
63}