Golang之RabbitMQ基础使用

890 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

RabbitMQ是由Erlang语言实现的消息队列,具有内存加速、硬盘持久化的功能,通过RabbitMQ能够轻松的实现消息的订阅与发布,使得系统能有条不紊的处理用户的请求。截止目前,官方为Go、Java、Python等多达11中语言提供了方便调用的SDK,为用户提供了方便测试、监控的管理后台。本文将从RabbitMQ的安装、命令行的使用讲起,着重分享针对golang模块的基础使用。

官方文档:www.rabbitmq.com/getstarted.…

安装

推荐使用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