golang rabbitMQ 消息持久化
时间: 2023-07-20 12:34:43 浏览: 148
go-amqp-example:Golang中RabbitMQ消息的生产者和消费者示例
在 Golang 中使用 RabbitMQ 实现消息持久化,可以使用 `github.com/streadway/amqp` 包。下面是一个简单的示例代码:
```go
package main
import (
"fmt"
"log"
"github.com/streadway/amqp"
)
func main() {
// 连接 RabbitMQ 服务器
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
if err != nil {
log.Fatalf("Failed to connect to RabbitMQ: %v", err)
}
defer conn.Close()
// 创建 channel
ch, err := conn.Channel()
if err != nil {
log.Fatalf("Failed to open a channel: %v", err)
}
defer ch.Close()
// 声明队列
q, err := ch.QueueDeclare(
"hello", // 队列名称
true, // 队列持久化
false, // 不自动删除队列
false, // 不排他队列
false, // 不等待队列在创建时可用
nil, // 额外的参数
)
if err != nil {
log.Fatalf("Failed to declare a queue: %v", err)
}
// 发布消息
body := "Hello, world!"
err = ch.Publish(
"", // exchange
q.Name, // routing key
true, // 消息持久化
false, // 不立即发送
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(body),
})
if err != nil {
log.Fatalf("Failed to publish a message: %v", err)
}
fmt.Println("Message sent")
}
```
在上面的代码中,我们使用 `amqp.Dial` 函数连接 RabbitMQ 服务器,然后使用 `conn.Channel` 函数创建 channel。接下来,我们使用 `ch.QueueDeclare` 函数声明队列,并将其设置为持久化队列。然后,使用 `ch.Publish` 函数发布消息并将其设置为持久化消息。最后,我们使用 `log` 和 `fmt` 包打印消息并关闭 channel 和连接。
需要注意的是,消息和队列都需要设置为持久化才能实现消息持久化。如果只有一个设置为持久化,仍然会丢失消息的风险。
阅读全文