go-rabbitmq-study/main.go

92 lines
2.1 KiB
Go

package main
import (
"github.com/streadway/amqp"
"log"
"skcks.cn/study/rabbitmq/exchange"
"skcks.cn/study/rabbitmq/publish"
"skcks.cn/study/rabbitmq/queue"
"time"
)
const ServerURL = "amqp://shikong:12341234@10.10.10.100:15672"
type Message struct {
Time int64
MilliTime int64
MicroTime int64
NanoTime int64
}
func main() {
conn, err := amqp.Dial(ServerURL)
defer func(conn *amqp.Connection) {
_ = conn.Close()
}(conn)
if err != nil {
log.Fatalln(err)
}
log.Println("连接成功")
channel, err := conn.Channel()
defer func(channel *amqp.Channel) {
err := channel.Close()
if err != nil {
}
}(channel)
errors := make([]error, 0)
// 声明交换机
err = exchange.DeclareDirect(channel, exchange.DefaultDirectExchangeName)
errors = append(errors, exchange.DeclareDirect(channel, exchange.DefaultDirectExchangeName))
queue1 := "direct_queue1"
queue2 := "direct_queue2"
route1 := "teacher"
route2 := "student"
// 声明队列
errors = append(errors, queue.DeclareDirect(channel, queue1))
errors = append(errors, queue.DeclareDirect(channel, queue2))
// 声明交换机与队列绑定及路由关系
errors = append(errors, channel.QueueBind(queue1, route1, exchange.DefaultDirectExchangeName, false, nil))
errors = append(errors, channel.QueueBind(queue2, route2, exchange.DefaultDirectExchangeName, false, nil))
ch := make(chan bool)
go func() {
for j := 0; j < 10_0000; j++ {
_ = publish.Send(channel,
exchange.DefaultDirectExchangeName, route1, false, false, &Message{
Time: time.Now().Unix(),
MilliTime: time.Now().UnixMilli(),
MicroTime: time.Now().UnixMicro(),
NanoTime: time.Now().UnixNano(),
},
)
_ = publish.Send(channel,
exchange.DefaultDirectExchangeName, route2, false, false, &Message{
Time: time.Now().Unix(),
MilliTime: time.Now().UnixMilli(),
MicroTime: time.Now().UnixMicro(),
NanoTime: time.Now().UnixNano(),
},
)
}
ch <- true
}()
if len(errors) > 0 {
for _, err := range errors {
if err != nil {
log.Fatalln(err)
}
}
}
<-ch
}