99 lines
2.0 KiB
Go
99 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/go-stomp/stomp/v3"
|
|
)
|
|
|
|
const defaultPort = ":61613"
|
|
|
|
var serverAddr = flag.String("server", "localhost:61613", "STOMP server endpoint")
|
|
var messageCount = flag.Int("count", 10, "Number of messages to send/receive")
|
|
var queueName = flag.String("queue", "/queue/client_test", "Destination queue")
|
|
var helpFlag = flag.Bool("help", false, "Print help text")
|
|
var stop = make(chan bool)
|
|
|
|
// these are the default options that work with RabbitMQ
|
|
var options []func(*stomp.Conn) error = []func(*stomp.Conn) error{
|
|
stomp.ConnOpt.Login("guest", "guest"),
|
|
stomp.ConnOpt.Host("/"),
|
|
}
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
if *helpFlag {
|
|
fmt.Fprintf(os.Stderr, "Usage of %s\n", os.Args[0])
|
|
flag.PrintDefaults()
|
|
os.Exit(1)
|
|
}
|
|
|
|
subscribed := make(chan bool)
|
|
go recvMessages(subscribed)
|
|
|
|
// wait until we know the receiver has subscribed
|
|
<-subscribed
|
|
|
|
go sendMessages()
|
|
|
|
<-stop
|
|
<-stop
|
|
}
|
|
|
|
func sendMessages() {
|
|
defer func() {
|
|
stop <- true
|
|
}()
|
|
|
|
conn, err := stomp.Dial("tcp", *serverAddr, options...)
|
|
if err != nil {
|
|
println("cannot connect to server", err.Error())
|
|
return
|
|
}
|
|
|
|
for i := 1; i <= *messageCount; i++ {
|
|
text := fmt.Sprintf("Message #%d", i)
|
|
err = conn.Send(*queueName, "text/plain",
|
|
[]byte(text), nil)
|
|
if err != nil {
|
|
println("failed to send to server", err)
|
|
return
|
|
}
|
|
}
|
|
println("sender finished")
|
|
}
|
|
|
|
func recvMessages(subscribed chan bool) {
|
|
defer func() {
|
|
stop <- true
|
|
}()
|
|
|
|
conn, err := stomp.Dial("tcp", *serverAddr, options...)
|
|
|
|
if err != nil {
|
|
println("cannot connect to server", err.Error())
|
|
return
|
|
}
|
|
|
|
sub, err := conn.Subscribe(*queueName, stomp.AckAuto)
|
|
if err != nil {
|
|
println("cannot subscribe to", *queueName, err.Error())
|
|
return
|
|
}
|
|
close(subscribed)
|
|
|
|
for i := 1; i <= *messageCount; i++ {
|
|
msg := <-sub.C
|
|
expectedText := fmt.Sprintf("Message #%d", i)
|
|
actualText := string(msg.Body)
|
|
if expectedText != actualText {
|
|
println("Expected:", expectedText)
|
|
println("Actual:", actualText)
|
|
}
|
|
}
|
|
println("receiver finished")
|
|
|
|
}
|