登录
首页 >  Golang >  Go问答

Go语言与RabbitMQ

来源:stackoverflow

时间:2024-02-16 22:36:12 440浏览 收藏

一分耕耘,一分收获!既然都打开这篇《Go语言与RabbitMQ》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我按照教程示例进行操作,但它从队列中读取所有消息一次,如何从队列中只读取一条消息?欣赏!

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))

正确答案


您可以使用 qos 将通道配置为一次仅接收 1 条消息

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))

好了,本文到此结束,带大家了解了《Go语言与RabbitMQ》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>