如何超时rabbitmq消费者?

时间:2017-03-06 13:23:54

标签: go rabbitmq

我有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)
}

1 个答案:

答案 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)
    }
}

可能需要一些抛光,例如我想最好在收到消息时停止计时器,并在完成处理后再次启用它,但这应该让你开始。