Golang RabbitMQ(兔子消息队列)

huangapple go评论88阅读模式
英文:

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(
		&quot;QueueService1&quot;, // queue name
		&quot;&quot;,              // consumer
		true,            // auto-ack
		false,           // exclusive
		false,           // no local
		false,           // no wait
		nil,             // arguments
	)
	if err != nil {
		log.Println(err)
	}
    msg := &lt;-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 := &quot;...&quot;
queue := &quot;...&quot;
conn, err := amqp.Dial(url)
if err != nil {
  log.Fatal(&quot;Cannot connect to rabbitmq&quot;)
}

ch, err := conn.Channel()
if err != nil {
  log.Fatal(&quot;Cannot create channel&quot;)
}

if _, err := ch.QueueDeclare(queue, false, true, false, false, nil); err != nil {
  log.Fatal(&quot;Cannot create queue&quot;)
}

// Indicate we only want 1 message to acknowledge at a time.
if err := ch.Qos(1, 0, false); err != nil {
  log.Fatal(&quot;Qos Setting was unsuccessfull&quot;)
}

// Exclusive consumer
messages, err := ch.Consume(queue, &quot;&quot;, false, true, false, false, nil)

msg := &lt;-messages
fmt.Println(string(msg.Body))

huangapple
  • 本文由 发表于 2022年3月18日 20:53:12
  • 转载请务必保留本文链接:https://go.coder-hub.com/71527323.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定