package main
import (
"github.com/streadway/amqp"
"fmt"
)
const (
host1 = "127.0.0.1"
port1 = 5672
)
func main() {
var (
args = make(map[string]interface{})
)
conn, err := amqp.Dial(fmt.Sprintf("amqp://root:root@%s:%d/", host1, port1))
if err != nil {
fmt.Println("connect rabbitmq server failed:", err)
return
}
defer conn.Close()
ch, err := conn.Channel()
if err != nil {
fmt.Println("create channel failed:", err)
return
}
defer ch.Close()
err = ch.ExchangeDeclare("exchange.dlx", "direct", true, false, false, false, nil)
if err != nil {
fmt.Println("declare dlx exchange error:", err)
return
}
err = ch.ExchangeDeclare("exchange.normal", "fanout", true, false, false, false, nil)
if err != nil {
fmt.Println("declare normal exchange error:", err)
return
}
//設置隊列的過期時間
args["x-message-ttl"] = 10000
//設置死信交換器
args["x-dead-letter-exchange"] = "exchange.dlx"
//設置死信交換器Key
args["x-dead-letter-routing-key"] = "dlxKey"
normalQueue, err := ch.QueueDeclare("queue.normal", true, false, false, false, args)
if err != nil {
fmt.Println("declare normal queue error:", err)
return
}
err = ch.QueueBind(normalQueue.Name, "normalKey", "exchange.normal", false, nil)
if err != nil {
fmt.Println("bind normal queue error:", err)
return
}
dlxQueue, err := ch.QueueDeclare("queue.dlx", true, false, false, false, nil)
if err != nil {
fmt.Println("declare dlx queue error:", err)
return
}
err = ch.QueueBind(dlxQueue.Name, "dlxKey", "exchange.dlx", false, nil)
if err != nil {
fmt.Println("bind dlx queue error:", err)
return
}
ch.Publish("exchange.normal", "normalKey", false, false, amqp.Publishing{
ContentType: "text/plain",
Body: []byte("test dlx message"),
})
}