mirror of
https://gitee.com/shikong-sk/go-rabbitmq-study
synced 2025-02-23 07:22:15 +08:00
92 lines
2.1 KiB
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
|
|
}
|