我有rabbitmq消耗队列但是一旦客户端订阅它就会永远消耗队列。是否有超时声明并退出,即队列为空后?
msgs, err := ch.Consume(
q.Name, // queue
"", // consumer
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
for msg := range msgs {
log.Printf("Received message with message: %s", msg.Body)
}
答案 0 :(得分:2)
您可以使用the standard Go pattern for timing out。
这是一个有效的例子。
const duration = 3 * time.Second
timer := time.NewTimer(duration)
for {
select {
case d := <-msgs:
timer.Reset(duration)
fmt.Printf("Received a message: %s\n", d.Body)
case <- timer.C:
fmt.Println("Timeout !")
os.Exit(1)
}
}
可能需要一些抛光,例如我想最好在收到消息时停止计时器,并在完成处理后再次启用它,但这应该让你开始。