message 设置 persistent 属性
时间: 2024-03-12 10:45:49 浏览: 21
在 Golang 中使用 `github.com/streadway/amqp` 包发布消息时,可以使用 `amqp.Publishing` 结构体的 `DeliveryMode` 属性来设置消息的持久化属性。将 `DeliveryMode` 设置为 `amqp.Persistent`,表示该消息是持久化消息。示例代码如下:
```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),
DeliveryMode: amqp.Persistent, // 设置消息持久化属性
})
if err != nil {
log.Fatalf("Failed to publish a message: %v", err)
}
fmt.Println("Message sent")
}
```
在上面的代码中,我们将 `DeliveryMode` 设置为 `amqp.Persistent`,表示该消息是持久化消息。这样,即使 RabbitMQ 服务器崩溃,也不会丢失这条消息。需要注意的是,`DeliveryMode` 属性只能在发布消息时设置,无法在消费消息时设置。