部署rabbitmq
直接使用docker部署一个单节点的mq:
登录dockerhub查看rabbitmq镜像:
下载x-management镜像,此版本带管理后台。
1 2 3 4 5 6 7
| docker pull rabbitmq:3.9.4-management
docker run -d --name rabbitmq3.9.4-management --hostname rabbitmq \ -p 5672:5672 -p 15672:15672 \ -v /var/lib/rabbitmq:/var/lib/rabbitmq \ -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin123 \ rabbitmq:3.9.4-management
|
浏览器打开ip:15672访问并登录:
部署完毕。
配置rabbitmq
修改配置
默认配置在一般情况下是够用的。
点击查看github上的配置模版,里边有详细的配置项描述。
分配帐号
Step1:创建test用户
Step2:创建virtual host
Step3:用户授权virtual host
Step4:查看用户权限
使用 Golang Rabbitmq 客户端
这里使用 Go amqp 库来实现最简单的消息模型。
Step1:安装 amqp
1
| go get github.com/streadway/amqp
|
Step2:定义消息发布者 send.go
和 消息消费者 receive.go
send.go
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package main
import ( "log"
"github.com/streadway/amqp" )
func failOnError(err error, msg string) { if err != nil { log.Fatalf("%s: %s", msg, err) } }
func main() { conn, err := amqp.Dial("amqp://test:test123@192.168.1.10:5672//test") failOnError(err, "Failed to connect to RabbitMQ") defer conn.Close()
ch, err := conn.Channel() failOnError(err, "Failed to open a channel") defer ch.Close()
q, err := ch.QueueDeclare( "hello", false, false, false, false, nil, ) failOnError(err, "Failed to declare a queue")
body := "Hello ashin!" err = ch.Publish( "", q.Name, false, false, amqp.Publishing{ ContentType: "text/plain", Body: []byte(body), }) failOnError(err, "Failed to publish a message") log.Printf(" [x] Sent %s", body) }
|
receive.go
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| package main
import ( "log"
"github.com/streadway/amqp" )
func failOnErr(err error, msg string) { if err != nil { log.Fatalf("%s: %s", msg, err) } }
func main() { conn, err := amqp.Dial("amqp://test:test123@192.168.1.10:5672//test") failOnErr(err, "Failed to connect to RabbitMQ") defer conn.Close()
ch, err := conn.Channel() failOnErr(err, "Failed to open a channel") defer ch.Close()
q, err := ch.QueueDeclare( "hello", false, false, false, false, nil, ) failOnErr(err, "Failed to declare a queue")
msgs, err := ch.Consume( q.Name, "", true, false, false, false, nil, ) failOnErr(err, "Failed to register a consumer")
forever := make(chan bool)
go func() { for d := range msgs { log.Printf("Received a message: %s", d.Body) } }()
log.Printf(" [*] Waiting for messages. To exit press CTRL+C") <-forever }
|
运行 send.go
:
查看队列:
运行 receive.go
:
查看管道:
可以看到,已经能成功发布和消费消息了。
推荐阅读
rabbitmq官方文档
保姆级别的RabbitMQ教程
streadway/amqp