首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang RabbitMQ

Golang RabbitMQ
EN

Stack Overflow用户
提问于 2022-03-18 12:53:12
回答 1查看 474关注 0票数 0

我学习了本教程的示例,但是它只读取了一次队列中的所有消息,如何从队列中只读取一条消息?感激不尽!

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

发布于 2022-03-18 13:50:47

您可以使用Qos将通道配置为一次只接收一条消息。

代码语言:javascript
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71527323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档