- 生产者
package product
import (
"fmt"
"github.com/streadway/amqp"
)
func ProducerDlx() {
var(
conn *amqp.Connection
err error
ch *amqp.Channel
)
if conn, err = amqp.Dial("amqp://liulong:liulong@127.0.0.1:5672/"); err!=nil{
fmt.Println("amqp.Dial err :", err)
return
}
defer conn.Close()
if ch, err = conn.Channel(); err!=nil{
fmt.Println("conn.Channel err: ", err)
return
}
defer ch.Close()
if err = ch.ExchangeDeclare(
"long_abc",
amqp.ExchangeDirect,
true,
false,
false,
false,
nil,
); err!=nil{
fmt.Println("ch.ExchangeDeclare err: ", err)
return
}
if err = ch.Publish(
"long_abc",
"zhe_mess",
false,
false,
amqp.Publishing{
Headers: amqp.Table{},
ContentType:"text/plain",
Body:[]byte("hello world dlx"),
DeliveryMode:amqp.Persistent,
Priority:0,
},
); err!=nil{
fmt.Println("ch.Publish err: ", err)
return
}
}
- 消费正常队列
package consum
import (
"fmt"
"github.com/streadway/amqp"
"time"
)
func Consumer() {
var(
conn *amqp.Connection
err error
ch *amqp.Channel
queue amqp.Queue
dlxExchangeName string
delvers <- chan amqp.Delivery
message amqp.Delivery
ok bool
)
if conn, err = amqp.Dial("amqp://liulong:liulong@127.0.0.1:5672/"); err!=nil{
fmt.Println("amqp.Dial err :", err)
return
}
defer conn.Close()
if ch, err = conn.Channel(); err!=nil{
fmt.Println("conn.Channel err: ", err)
return
}
defer ch.Close()
if err = ch.Qos(3, 0, false); err!=nil{
fmt.Println("ch.Qos err: ", err)
return
}
dlxExchangeName = "dlx_exchange"
if err = ch.ExchangeDeclare(
"long_abc",
amqp.ExchangeDirect,
true,
false,
false,
false,
nil,
); err!=nil{
fmt.Println("ch.ExchangeDeclare err: ", err)
return
}
argsQue := make(map[string]interface{})
argsQue["x-dead-letter-exchange"] = dlxExchangeName
argsQue["x-message-ttl"] = 6000
queue, err = ch.QueueDeclare("zhe_123", true, false, false, false, argsQue)
if err !=nil{
fmt.Println("ch.QueueDeclare err :", err)
return
}
if err = ch.QueueBind(queue.Name, "zhe_mess", "long_abc", false, nil);err!=nil{
fmt.Println("ch.QueueBind err: ", err)
return
}
delvers, err = ch.Consume(
queue.Name,
"",
false,
false,
false,
false,
nil,
)
if err!=nil{
fmt.Println("ch.Consume err: ", err)
}
for{
select {
case message, ok = <- delvers:
if !ok{
continue
}
go func() {
time.Sleep(time.Second*2)
if err = message.Ack(true); err!=nil{
fmt.Println("d.Ack err: ", err)
return
}
fmt.Println("已确认", string(message.Body))
}()
case <-time.After(time.Second*1):
}
}
- 消费死信队列
package consum
import (
"fmt"
"github.com/streadway/amqp"
"time"
)
func ConsumerDlx() {
var(
conn *amqp.Connection
ch *amqp.Channel
queue amqp.Queue
err error
delvers <- chan amqp.Delivery
message amqp.Delivery
ok bool
)
if conn, err = amqp.Dial("amqp://liulong:liulong@52.83.64.102:5672/");err!=nil{
fmt.Println("amqp.Dial err: ", err)
return
}
if ch, err = conn.Channel(); err!=nil{
fmt.Println("conn.Channel err: ", err)
return
}
if err = ch.ExchangeDeclare(
"dlx_exchange",
amqp.ExchangeFanout,
true,
false,
false,
false,
nil,
); err!=nil{
fmt.Println("ch.ExchangeDeclare: ", err)
return
}
if queue, err = ch.QueueDeclare(
"dlx_queue",
true,
false,
false,
false,
nil,
); err!=nil{
fmt.Println("ch.QueueDeclare err: ", err)
return
}
if err = ch.QueueBind(queue.Name, "", "dlx_exchange", false, nil); err!=nil{
fmt.Println("ch.QueueBind err: ", err)
return
}
delvers, err = ch.Consume(
queue.Name,
"",
false,
false,
false,
false,
nil,
)
if err!=nil{
fmt.Println("ch.Consume err: ", err)
}
for{
select {
case message, ok = <- delvers:
if !ok{
continue
}
go func() {
time.Sleep(time.Second*3)
if err = message.Ack(true); err!=nil{
fmt.Println("dlx d.Ack err: ", err)
return
}
fmt.Println("已确认dlx", string(message.Body))
}()
case <-time.After(time.Second*1):
}
}
}