一、rabbitmq
package main
import (
"fmt"
"log"
"github.com/streadway/amqp"
)
func failOnError(err error, msg string) {
if err != nil {
log.Fatalf("%s: %s", msg, err)
panic(fmt.Sprintf("%s: %s", msg, err))
}
}
func main() {
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
failOnError(err, "Failed to connect to RabbitMQ")
defer conn.Close()
ch, err := conn.Channel()
failOnError(err, "Failed to open a channel")
defer ch.Close()
failOnError(err, "Failed to declare a queue")
err = ch.Qos(
1,
0,
false,
)
failOnError(err, "Failed to set Qos")
funcSend(ch)
funcRecv(ch)
}
func funcSend(ch *amqp.Channel) {
q, err := ch.QueueDeclare(
"queue",
false,
false,
false,
false,
nil,
)
failOnError(err, "Failed to declare a queue")
body := "Hello World!"
error := ch.Publish(
"",
q.Name,
false,
false,
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(body),
})
log.Printf("[x] Sent %s", body)
failOnError(error, "Failed to publish a message")
}
func funcRecv(ch *amqp.Channel) {
q, err := ch.QueueDeclare(
"queue",
false,
false,
false,
false,
nil,
)
failOnError(err, "Failed to declare a queue")
msgs, err := ch.Consume(
q.Name,
"",
true,
false,
false,
false,
nil,
)
failOnError(err, "Failed to register a consumer")
forever := make(chan bool)
go func() {
for d := range msgs {
log.Printf("Received a message: %s", d.Body)
}
}()
log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
<-forever
}
二、nats-io
package main
import (
"flag"
"log"
"strconv"
"time"
"github.com/nats-io/nats.go"
"github.com/pborman/uuid"
)
const (
url = nats.DefaultURL
)
var (
nc *nats.Conn
err error
)
func init() {
}
func main() {
}
func sendMessage() {
var (
subj = flag.String("subj", "", "subject name")
)
flag.Parse()
log.Println(*subj)
startClient(*subj)
time.Sleep(time.Second)
}
func startClient(subj string) {
for i := 0; i < 1; i++ {
id := uuid.New()
log.Println(id)
nc.Publish(subj, []byte(id+" Sun "+strconv.Itoa(i)))
nc.Publish(subj, []byte(id+" Rain "+strconv.Itoa(i)))
nc.Publish(subj, []byte(id+" Fog "+strconv.Itoa(i)))
nc.Publish(subj, []byte(id+" Cloudy "+strconv.Itoa(i)))
}
}
func receiveMessage() {
var (
servername = flag.String("servername", "y", "name for server")
queueGroup = flag.String("group", "", "group name for Subscribe")
subj = flag.String("subj", "", "subject name")
)
flag.Parse()
log.Println(*servername, *queueGroup, *subj)
startService(*subj, *servername+" worker1", *queueGroup)
startService(*subj, *servername+" worker2", *queueGroup)
startService(*subj, *servername+" worker3", *queueGroup)
select {
}
}
func startService(subj, name, queue string) {
go async(nc, subj, name, queue)
}
func async(nc *nats.Conn, subj, name, queue string) {
nc.QueueSubscribe(subj, queue, func(msg *nats.Msg) {
log.Println(name, "Received a message From Async : ", string(msg.Data))
})
}
func checkErr(err error) bool {
if err != nil {
log.Println(err)
return false
}
return true
}