博客
关于我
go使用rabbitmq 实践
阅读量:732 次
发布时间:2019-03-21

本文共 3318 字,大约阅读时间需要 11 分钟。

使用 Docker Compose 安装 RabbitMQ

通过 Docker Compose 模拟 RabbitMQ 服务部署

在开始之前,请首先确保你已经安装了 Docker 和 Docker Compose。如果尚未安装,可以通过以下命令安装:

curl -L "https://github.com/docker/compose/releases/download/v3.82.2/docker-compose-$(uname -m)-binary-AMD64" -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose

接下来,我们将按照以下步骤设置 RabbitMQ 服务。

部署 RabbitMQ

  • 打开文本编辑器,如 Vim。
  • vim docker-compose.yml
    1. 添加以下内容到 docker-compose.yml 文件中:
    2. version: '3'services:  rabbitmq:    image: rabbitmq:management    container_name: rabbitmq    restart: always    hostname: myRabbitmq    ports:      - ${MANAGEMENT_PORT}:15672      - ${RABBITMQ_PORT}:5672    volumes:      - ${RABBITMQ_DATA_FILE}:/var/lib/rabbitmq    environment:      - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}      - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS}
      1. 创建一个新的 .env 文件,指定必要的环境变量:
      2. vim .env

        文件内容如下:

        RABBITMQ_PORT=5672MANAGEMENT_PORT=15672RABBITMQ_DATA_FILE=./dataRABBITMQ_DEFAULT_USER=rootRABBITMQ_DEFAULT_PASS=root
        1. 在终端运行以下命令启动服务:
        2. docker-compose up -d

          服务将自动启动,并在后台运行。你可以查看运行状态:

          docker-compose logs -f

          存储和访问配置

          注意到我们将 RabbitMQ 的数据存储在了 ./data 目录,这样在容器下一次启动时,数据不会丢失。你可以访问 RabbitMQ 管理界面:

          地址:http://localhost:15672

          用户名和密码默认为 rootroot,结合环境变量文件设置的值。

          注意:我们建议在生产环境中将用户名和密码更改为安全的值。


          创建 Go 项目

          本节将指导你创建一个简单的 Go 消息队列应用,用于与 RabbitMQ 通话。

          工作目录结构

          创建一个新的工作目录,按照以下结构组织项目:

          project/├── send.go       # 忠诚发送消息├── receive.go    # 接收消息└── main.go       # 主函数入口

          安装依赖

          首先,安装 RabbitMQ Go 客户库。你可以使用以下命令运行:

          go get github.com/streadway/amqp

          编写代码

          package mainimport (    "fmt"    "github.com/streadway/amqp"    "log")func failOnError(err error, msg string) {    if err != nil {        log.Fatalf("%s: %s", msg, err)    }}// 发送消息func main() {    // 连接 RabbitMQ 服务器    conn, err := amqp.Dial("amqp://test:test@127.0.0.1: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("test", false, false, false, false, nil)    failOnError(err, "Failed to declare a queue")    // 发送消息    body := "你好"    err = ch.Publish("", q.Name, false, false, amqp.Publishing{        ContentType: "text/plain",        Body:      []byte(body),    })    failOnError(err, "Failed to publish a message")    fmt.Println("发送消息成功")}
          package mainimport (    "fmt"    "github.com/streadway/amqp"    "log")func failOnError(err error, msg string) {    if err != nil {        log.Fatalf("%s: %s", msg, err)    }}// 接收消息func main() {    // 连接 RabbitMQ 服务器    conn, err := amqp.Dial("amqp://test:test@127.0.0.1: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("test", false, false, false, false, nil)    failOnError(err, "Failed to declare a queue")    // 设置消息接收模式    ch.Qos(1, 1, false)    // 开始接收消息    msg, err := ch.Receive()    for {        body, err := msg.Body()        if err != nil {            break        }        fmt.Printf("接收消息:%s\n", string(body))    }    fmt.Printf("接收消息成功\n")}

          编译和运行

          在项目根目录下,编译各个组件。

          go build receive.gogo build send.go

          通过以上步骤,你已经掌握了如何使用 Docker Compose 安装 RabbitMQ,并创建了一个简单的 Go 消息队列应用。接下来可以根据实际需求扩展应用功能,或者添加更多消费者来处理 RabbitMQ 消息。

    转载地址:http://cyugz.baihongyu.com/

    你可能感兴趣的文章
    MySQL基础系列—SQL分类之一
    查看>>
    MySQL处理千万级数据分页查询的优化方案
    查看>>
    mysql备份
    查看>>
    mysql备份与恢复
    查看>>
    mysql备份工具xtrabackup
    查看>>
    mysql备份恢复出错_尝试备份/恢复mysql数据库时出错
    查看>>
    mysql复制内容到一张新表
    查看>>
    mysql复制表结构和数据
    查看>>
    mysql复杂查询,优质题目
    查看>>
    MySQL外键约束
    查看>>
    MySQL多表关联on和where速度对比实测谁更快
    查看>>
    MySQL多表左右连接查询
    查看>>
    mysql大批量删除(修改)The total number of locks exceeds the lock table size 错误的解决办法
    查看>>
    mysql如何做到存在就更新不存就插入_MySQL 索引及优化实战(二)
    查看>>
    mysql如何删除数据表,被关联的数据表如何删除呢
    查看>>
    MySQL如何实现ACID ?
    查看>>
    mysql如何记录数据库响应时间
    查看>>
    MySQL子查询
    查看>>
    Mysql字段、索引操作
    查看>>
    mysql字段的细节(查询自定义的字段[意义-行列转置];UNION ALL;case-when)
    查看>>