tencent cloud

消息队列 RabbitMQ 版

动态与公告
新功能发布记录
公告
产品简介
TDMQ 产品系列介绍与选型
什么是消息队列 RabbitMQ 版
产品优势
应用场景
开源托管版与 Serverless 版差异说明
开源版本支持说明
与开源 RabbitMQ 对比
高可用
使用限制
RabbitMQ 相关概念
开区地域
相关云服务
产品计费
计费概述
价格说明
计费示例
按小时付费转包年包月
续费说明
查看消费明细
欠费说明
退费说明
快速入门
入门流程指引
步骤1:准备工作
步骤2:创建 RabbitMQ 集群
步骤3:配置 Vhost
步骤4:使用 SDK 收发消息
步骤5:查询消息
步骤6:销毁资源
用户指南
使用流程指引
配置账号权限
创建集群
配置 Vhost
连接集群
管理消息
配置高级特性
管理集群
查看监控和配置告警
实践教程
实践教程使用说明
RabbitMQ 客户端实践教程
RabbitMQ 消息可靠性实践教程
RabbitMQ 支持 MQTT 协议说明
迁移集群
迁移方案概述
步骤1:购买云上实例
步骤2:迁移元数据上云
步骤3:开启双读写
API 参考(开源托管版)
API 概览
API 参考(Serverless 版)
History
Introduction
API Category
Making API Requests
Relevant APIs for RabbitMQ Serverless PAAS Capacity
RabbitMQ Serverless Instance Management APIs
Data Types
Error Codes
SDK 文档
SDK 概述
Spring Boot Starter 接入
Spring Cloud Stream 接入
Java SDK
Go SDK
Python SDK
PHP SDK
安全与合规
权限管理
网络安全
删除保护
变更记录
云 API 审计
常见问题
服务等级协议
联系我们

Go SDK

PDF
聚焦模式
字号
最后更新时间: 2026-01-04 15:32:34

操作场景

本文以调用 Go SDK 为例介绍通过开源 SDK 实现消息收发的操作过程,帮助您更好地理解消息收发的完整过程。

前提条件

已参考 SDK 概述,获取相关的客户端连接参数

操作步骤

1. 执行如下命令在客户端环境安装所需包。
go get "github.com/rabbitmq/amqp091-go"
2. 安装完成后,即可引入到您的 GO 工程文件中。
import (amqp "github.com/rabbitmq/amqp091-go")
3. 引入之后即可在您的项目中使用客户端。

使用示例

1. 建立连接和通信信道。
// 所需参数
const (
// Host 集群详情-客户端接入页面,复制该接入点
// 比如amqp://1.1.1.1:5672,这里只需要填写ip即可
Host = "1.1.1.1"
// UserName 用户名称, 需要先在控制台上创建该用户,也可以使用集群详情-web控制台访问地址页面,admin账号
UserName = "test"
// Password 用户密钥, 需要先在控制台上创建该密码
Password = "test"
// Vhost 这里填写自定义的vhost,需要先在控制台上创建该vhost
Vhost = "test"
)
// 创建连接
conn, err := amqp.Dial("amqp://" + UserName + ":" + Password + "@" + Host + ":5672/" + Vhost)
failOnError(err, "Failed to connect to RabbitMQ")
defer func(conn *amqp.Connection) {
err := conn.Close()
if err != nil {
}
}(conn)

// 建立通道
ch, err := conn.Channel()
failOnError(err, "Failed to open a channel")
defer func(ch *amqp.Channel) {
err := ch.Close()
if err != nil {
}
}(ch)
参数
说明
host
集群接入地址,在集群基本信息页面的客户端接入模块获取。

username
用户名称,填写在控制台创建的用户名称。
password
用户密码,填写在控制台创建用户时填写的密码。
vhost
Vhost 名称,在控制台 Vhost 列表获取。
2. 声明交换机。
// 声明交换机 (名称和类型需要与存在的交换机保持一致)
err = ch.ExchangeDeclare(
"logs-exchange", // 交换机名称
"fanout", // 交换机类型
true, // durable
false, // auto-deleted
false, // internal
false, // no-wait
nil, // arguments
)
failOnError(err, "Failed to declare a exchange")
3. 发布消息。 消息可发给交换机,也可以直接发到指定队列 ( hello world 和 work queues 消息模型)。
发布消息到交换机:
// 消息内容
body := "this is new message."
// 发布消息到交换机
err = ch.Publish(
"logs-exchange", // exchange
"", // routing key (根据使用的交换机类型可选择的是否需要routing key),如果不选择交换机,该参数为消息队列名称
false, // mandatory
false, // immediate
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(body),
})
failOnError(err, "Failed to publish a message")

发布消息到指定队列:
// 发布消息到指定的消息队列
err = ch.Publish(
"", // exchange
"queue.Name", // routing key
false, // mandatory
false, // immediate
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(body),
})
failOnError(err, "Failed to publish a message")
4. 订阅消息。
// 创建消费者并消费指定消息队列中的消息
msgs, err := ch.Consume(
"message-queue", // message-queue
"", // consumer
false, // 设置为非自动确认(可根据需求自己选择)
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
failOnError(err, "Failed to register a consumer")

// 获取消息队列中的消息
forever := make(chan bool)
go func() {
for d := range msgs {
log.Printf("Received a message: %s", d.Body)
t := time.Duration(1)
time.Sleep(t * time.Second)
// 手动回复ack
d.Ack(false)
}
}()
log.Printf(" [Consumer] Waiting for messages.")
<-forever
5. 消费者使用 routing key。
// 需要在消息队列中指定 交换机 和 routing key
err = ch.QueueBind(
"q.Name", // queue name
"routing_key", // routing key
"topic_demo", // exchange
false,
nil,
)
failOnError(err, "Failed to bind a queue")
说明
详细使用示例可参见 DemoRabbitMQ 官网


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈