英文:
Golang RabbitMQ
问题
我按照教程示例进行了操作,但它会一次性读取队列中的所有消息,我该如何只读取一个消息呢?谢谢!
messages, err := channelRabbitMQ.Consume(
"QueueService1", // 队列名称
"", // 消费者
true, // 自动确认
false, // 独占
false, // 不使用本地
false, // 不等待
nil, // 参数
)
if err != nil {
log.Println(err)
}
msg := <-messages
fmt.Println(string(msg.Body))
以上是你要翻译的内容。
英文:
I followed the tutorial examples, but it reads all message from queue once, how can I read only one message from a queue? Appreciate!
messages, err := channelRabbitMQ.Consume(
"QueueService1", // queue name
"", // consumer
true, // auto-ack
false, // exclusive
false, // no local
false, // no wait
nil, // arguments
)
if err != nil {
log.Println(err)
}
msg := <-messages
fmt.Println(string(msg.Body))
答案1
得分: 1
你可以使用Qos
来配置通道,以便一次只接收一条消息。
url := "..."
queue := "..."
conn, err := amqp.Dial(url)
if err != nil {
log.Fatal("无法连接到rabbitmq")
}
ch, err := conn.Channel()
if err != nil {
log.Fatal("无法创建通道")
}
if _, err := ch.QueueDeclare(queue, false, true, false, false, nil); err != nil {
log.Fatal("无法创建队列")
}
// 表示我们一次只想确认一条消息。
if err := ch.Qos(1, 0, false); err != nil {
log.Fatal("Qos设置失败")
}
// 独占消费者
messages, err := ch.Consume(queue, "", false, true, false, false, nil)
msg := <-messages
fmt.Println(string(msg.Body))
英文:
You can use Qos
to configure channel to only receive 1 message at a time
url := "..."
queue := "..."
conn, err := amqp.Dial(url)
if err != nil {
log.Fatal("Cannot connect to rabbitmq")
}
ch, err := conn.Channel()
if err != nil {
log.Fatal("Cannot create channel")
}
if _, err := ch.QueueDeclare(queue, false, true, false, false, nil); err != nil {
log.Fatal("Cannot create queue")
}
// Indicate we only want 1 message to acknowledge at a time.
if err := ch.Qos(1, 0, false); err != nil {
log.Fatal("Qos Setting was unsuccessfull")
}
// Exclusive consumer
messages, err := ch.Consume(queue, "", false, true, false, false, nil)
msg := <-messages
fmt.Println(string(msg.Body))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论