/
server.go
62 lines (46 loc) · 1.19 KB
/
server.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
package main
import (
"fmt"
"time"
log "github.com/sirupsen/logrus"
"github.com/golang/protobuf/proto"
"github.com/nats-io/nats.go"
)
// Check your error
func checkErr(err error) {
if err != nil {
log.Fatal("ERROR:", err)
}
}
func main() {
// CREATE UNIQUE ID BASED ON TIME
timeStart := time.Now().UTC()
uniqueID := timeStart.Format("05")
fmt.Println(uniqueID)
// CONNECT TO NATS (nats-server)
nc, err := nats.Connect("nats://127.0.0.1:4222")
checkErr(err)
defer nc.Close()
log.Println("Connected to " + nats.DefaultURL)
// RECEIVE
nc.QueueSubscribe("foo", "jeffsQueue", func(msg *nats.Msg) {
// UNMARSHAL -> DATA
rcvPerson := &Person{}
err = proto.Unmarshal(msg.Data, rcvPerson)
checkErr(err)
log.Printf("Person received: %+v\n", rcvPerson)
// REPLY
myReply := &MyReply{}
myReply.Thereply = fmt.Sprintf("This is a response %v, from count %d", uniqueID, rcvPerson.Count)
// MARSHAL
replymsg, err := proto.Marshal(myReply)
checkErr(err)
// SEND
// NATS - PUBLISH on "foo" (THE PIPE)
log.Printf("- Publishing replymsg (%v) to subject 'foo'\n", myReply.Thereply)
err = nc.Publish(msg.Reply, replymsg)
checkErr(err)
})
// wait - empty select
select {}
}