golang rabbitmq设置过期队列和死信队列

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"),
})
}
posted @ 2020-05-13 17:21  月球放牛  阅读(1115)  评论(0编辑  收藏  举报