本文共 3318 字,大约阅读时间需要 11 分钟。
通过 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 服务。
vim docker-compose.yml
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}
.env
文件,指定必要的环境变量:vim .env
文件内容如下:
RABBITMQ_PORT=5672MANAGEMENT_PORT=15672RABBITMQ_DATA_FILE=./dataRABBITMQ_DEFAULT_USER=rootRABBITMQ_DEFAULT_PASS=root
docker-compose up -d
服务将自动启动,并在后台运行。你可以查看运行状态:
docker-compose logs -f
注意到我们将 RabbitMQ 的数据存储在了 ./data
目录,这样在容器下一次启动时,数据不会丢失。你可以访问 RabbitMQ 管理界面:
地址:http://localhost:15672
用户名和密码默认为 root
和 root
,结合环境变量文件设置的值。
注意:我们建议在生产环境中将用户名和密码更改为安全的值。
本节将指导你创建一个简单的 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/