持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
RabbitMQ是由Erlang语言实现的消息队列,具有内存加速、硬盘持久化的功能,通过RabbitMQ能够轻松的实现消息的订阅与发布,使得系统能有条不紊的处理用户的请求。截止目前,官方为Go、Java、Python等多达11中语言提供了方便调用的SDK,为用户提供了方便测试、监控的管理后台。本文将从RabbitMQ的安装、命令行的使用讲起,着重分享针对golang模块的基础使用。
安装
推荐使用Docker进行安装,以下命令用于安装一个带管理后台的RabbitMQ服务,服务启动后通过 http://ip:8080 访问管理后台,默认账号密码为guest/guest
docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 -p 5672:5672 rabbitmq:3-management
命令行使用
使用一下命令,进入上面安装的RabbitMQ容器中
docker exec -it some-rabbit /bin/bash
创建消息队列
# 创建一个名字为 queue 的消息队列
rabbitmqadmin declare queue name=queue
查看消息队列列表
rabbitmqadmin list queues
删除消息队列列表
rabbitmqadmin delete queue name=queue
向消息队列中发布一条消息
rabbitmqadmin publish routing_key=queue payload="{name:getcharzp}"
获取指定消息队列中队头的数据(默认不消费)
rabbitmqadmin get queue=queue
通过 ackmode=ack_requeue_false 的方式获取指定消息队列中队头的数据并对其消费
rabbitmqadmin get queue=queue ackmode=ack_requeue_false
RabbitMQ的golang扩展安装
go get github.com/streadway/amqp
基于golang 模块的基础使用
操作步骤主要分为两步:
第一步、与 RabbitMQ 服务创建连接;
第二步、向 RabbitMQ 服务发布消息;
第三步、从 RabbitMQ 服务中读取数据。
连接 RabbitMQ 服务:
var conn, err = amqp.Dial("amqp://guest:guest@ip:5672/")
var ch, _ = conn.Channel()
发布消息
// 第一个参数为队列名称
q, _ := ch.QueueDeclare("queue", false, false, false, false, nil)
body := "Hello World !"
ch.Publish(
"", // 交换机名称
q.Name, // 队列名称
false, // mandatory
false, // immediate
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(body),
})
从队列的头部开始获取队列中的数据
// 第一个参数为队列名称
q, _ := ch.QueueDeclare("queue", false, false, false, false, nil)
msgs, _ := ch.Consume(q.Name, "", true, false, false, false, nil)
// 定义无缓冲 channel
forever := make(chan bool)
go func() {
for d := range msgs {
log.Printf("Message: %s", d.Body)
}
}()
<-forever