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 }