RabbitMQ发布/订阅

本文提供了RabbitMQ官方教程第三部分的详细指南及翻译,深入讲解了如何使用Java进行消息队列的高级操作,包括发布确认、消息持久化等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 Go 语言中实现 RabbitMQ发布 / 订阅模式(也称为 Pub/Sub 模式),你可以通过 `gopkg.in/amqp.v4` 这个包来进行。以下是基本的实验步骤: 1. **安装依赖**: 首先,你需要在项目中添加 amqp 包的依赖,可以使用 `go get gopkg.in/amqp.v4` 或者将 `"github.com/gotek/gomq/v4"` 添加到你的 `go.mod` 文件。 2. **创建连接**: 使用 `amqp.NewConnection()` 创建一个新的连接,传入 AMQP 服务器地址、用户名、密码等信息。例如: ```go conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") if err != nil { // 处理错误 } defer conn.Close() ``` 3. **声明交换机和队列**: 发布者需要声明一个主题(exchange),订阅者则声明一个接收消息的队列。例如: ```go exchangeName := "topic_logs" queueName := "my_logs_queue" _, err = conn.ExchangeDeclare( exchangeName, "topic", // 类型,这里使用 topic 类型支持多关键字过滤 true, // 是否持久化 false, // 是否自动删除 false, // 是否内部只消费 false, // 是否立即绑定 nil, // 路由键 ) queue, _ := conn.QueueDeclare( queueName, // 队列名 false, // 是否持久化 false, // 是否独占 false, // 当队列满了是否丢弃 0, // 队列长度 nil, // 集群路由键 ) ``` 4. **发布消息** (发布者): 对于每条要发布的消息,创建一个 `Message` 对象并设置其内容、路由键等信息。然后使用 `conn.Publish()` 方法发布: ```go message := amqp.Message{ Body: []byte("This is a log message"), RoutingKey: "app.error", } err = conn.ExchangePublish( exchangeName, // 出发点 "", // 目的地(默认为 exchangeName) message.RoutingKey, // 路由键 amqp.Publishing{ // 消息详情 DeliveryMode: amqp.Persistent, // 是否持久化消息 Headers: map[string]interface{}{"foo": "bar"}, // 可选头部信息 }, ) ``` 5. **订阅消息** (订阅者): 创建一个消费者并监听特定队列,当有新消息到来时执行回调函数: ```go consumer, err := conn.Consume(queue.Name, "", false, false, false, false, nil) if err != nil { // 处理错误 } defer func() { _ = consumer.Cancel() }() for msg := range consumer.C Delivered { fmt.Printf("Received message %s\n", string(msg.Body)) // 处理接收到的消息 } ``` 6. **关闭连接**: 完成操作后记得关闭连接释放资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值