生产者package product
import (
"fmt"
"github.com/streadway/amqp"
)
func Producer() {
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(
"long123",
amqp.ExchangeDirect,
true,
false,
false,
false,
nil,
); err!=nil{
fmt.Println("ch.ExchangeDeclare err: ", err)
return
}
err = ch.Publish(
"long123",
"abc_key",
false,
false,
amqp.Publishing{
Headers: amqp.Table{},
ContentType:"text/plain",
Body:[]byte("hello world"),
DeliveryMode:amqp.Persistent,
Priority:0,
},
);
if err!=nil{ fmt.Println("ch.Publish err: ", err)
return
}
}
消费者package consum
import (
"fmt"
"github.com/streadway/amqp"
"time"
)
func Consumer() {
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@127.0.0.1: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.Qos(3, 0, false); err!=nil{
fmt.Println("ch.Qos err: ", err)
return
}
if err = ch.ExchangeDeclare(
"long123",
amqp.ExchangeDirect,
true,
false,
false,
false,
nil,
); err!=nil{
fmt.Println("ch.ExchangeDeclare: ", err)
return
}
if queue, err = ch.QueueDeclare(
"abc",
true,
false,
false,
false,
nil,
); err!=nil{
fmt.Println("ch.QueueDeclare err: ", err)
return
}
if err = ch.QueueBind(queue.Name, "abc_key", "long123", 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{
return
}
go func() {
time.Sleep(time.Second*3)
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):
}
}
}