2017-03-06 56 views
0

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

回答

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

它可能需要一些拋光,例如,我想最好是在收到消息時停止計時器,並在完成處理後再次啓用計時器,但這會讓您開始計時。

+0

所以喜歡插入到上面的循環與休息? – irom

+1

是的,並且每次從通道讀取時也重置定時器。 – Zoyd

+0

我用case <-timeout使用了超時模式:os.Exit(1),但它並沒有在那個rabbitmq循環中退出 – irom