在消費之前我設置consumeChannel.Qos(5,0,false)但仍然只收到一條消息,而不是一包五條。我做錯了什么?完整代碼:consumeChannel.Qos(5,0,false)msgs, _ := consumeChannel.Consume("ticks", "", false, false, false, false, nil, )for d := range msgs { println("Received a message: %s", d.Body) println("Done") //here will be some extra multiple message handling //d.Ack(false)}
1 回答

子衿沉夜
TA貢獻1828條經驗 獲得超3個贊
但仍然只收到一條消息,而不是一包五條。我做錯了什么?
您不了解 RabbitMQ 和 QoS / prefetch 是如何工作的(文檔),或者它如何與range
Go 客戶端的操作員交互。
QoS 并不意味著“批量發送消息”,它對通道上未確認消息的數量設置了限制。如果您要刪除d.Ack
代碼中的調用并for
無限期地運行循環,它只會運行 5 次迭代,然后停止,因為 RabbitMQ 屆時將停止向您的消費者傳遞消息。
我沒有查看代碼,但我假設您使用的 Go 客戶端是以這樣一種方式編寫的:一旦消息被接收和解碼,它就會被傳送到頻道msgs
。當您在循環中確認消息時,它向 RabbitMQ 表明可以將另一條消息傳遞到該通道。
我建議重新編寫您的代碼以跟蹤通過通道傳遞了多少消息msgs
,完成您的工作,然后使用多重確認同時確認它們。
- 1 回答
- 0 關注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消