simple模式:简单模式,RabbitMQ最常用的模式,只有一个生产者和消费者,没有Exchange和RoutingKey的参与,只需指定QueueName即可。
完整代码:
package RabbitMQTest
import (
"fmt"
"github.com/streadway/amqp"
)
const MQURL = "amqp://guest:guest@127.0.0.1:5672/"
// 创建RabbitMQ链接
func NewRabbitMQClent() (conn *amqp.Connection, channel *amqp.Channel) {
// 创建链接
conn,err := amqp.Dial(MQURL)
if err != nil {
fmt.Printf("create RabbitMQ connection faild:%s", err)
}
channel,err = conn.Channel()
if err != nil {
fmt.Printf("get channel faild:%s", err)
}
return conn,channel
}
// 生产者
func Publisher(queueName string, message string) {
_,channel := NewRabbitMQClent()
// 尝试申请队列
_,err := channel.QueueDeclare(
queueName,
false,
false,
false,
false,
nil, )
if err != nil {
fmt.Printf("queue create faild: %s", err)
}
// 发送消息
channel.Publish(
"",
queueName,
false,
false,
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(message),
})
}
// 消费者
func Consumer(queueName string) {
_,channel := NewRabbitMQClent()
// 尝试申请队列
_,err := channel.QueueDeclare(
queueName,
false,
false,
false,
false,
nil, )
if err != nil {
fmt.Printf("queue create faild: %s", err)
}
msgs,err := channel.Consume(
queueName,
"",
true,
false,
false,
false,
nil)
if err != nil {
fmt.Printf("get message faild: %s", err)
}
forever := make(chan bool)
go func() {
for d := range msgs {
fmt.Printf("receive a message: %s\n", d.Body)
}
}()
<-forever
}
publisher.go生产者发送消息:
package main
import (
"learngo/RabbitMQTest"
"log"
)
func main() {
RabbitMQTest.NewRabbitMQClent()
RabbitMQTest.Publisher("test", "这是一条测试消息")
log.Println("message send success")
}
consumer.go消费者接受消息
package main
import "learngo/RabbitMQTest"
func main() {
RabbitMQTest.NewRabbitMQClent()
RabbitMQTest.Consumer("test")
}
最终效果: