Files
eagle/examples/queue/nats/main.go

64 lines
1.2 KiB
Go

package main
import (
"encoding/base64"
"log"
"strings"
"sync"
"time"
"github.com/go-eagle/eagle/pkg/queue/nats"
)
func main() {
var (
addr = "nats://localhost:4222"
topic = "hello"
)
producer := nats.NewProducer(addr)
consumer := nats.NewConsumer(addr)
published := make(chan struct{})
received := make(chan struct{})
wg := sync.WaitGroup{}
wg.Add(2)
go func() {
for {
select {
case <-published:
time.Sleep(3 * time.Second)
if err := producer.Publish(topic, []byte("hello nats")); err != nil {
log.Fatal(err)
}
log.Println("producer handler publish msg: ", "hello nats")
case <-received:
wg.Done()
break
}
}
}()
go func() {
for {
// nolint: gosimple
select {
default:
handler := func(message []byte) error {
decodeMessage, _ := base64.StdEncoding.DecodeString(strings.Trim(string(message), "\""))
log.Println("consumer handler receive msg: ", string(decodeMessage))
received <- struct{}{}
wg.Done()
return nil
}
if err := consumer.Consume(topic, handler); err != nil {
log.Fatal(err)
}
time.Sleep(5 * time.Second)
}
}
}()
published <- struct{}{}
wg.Wait()
}