mirror of
https://github.com/go-eagle/eagle.git
synced 2025-10-08 01:50:16 +08:00
64 lines
1.2 KiB
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()
|
|
}
|