在消費(fèi)之前我設(shè)置consumeChannel.Qos(5,0,false)但仍然只收到一條消息,而不是一包五條。我做錯(cuò)了什么?完整代碼: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貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
但仍然只收到一條消息,而不是一包五條。我做錯(cuò)了什么?
您不了解 RabbitMQ 和 QoS / prefetch 是如何工作的(文檔),或者它如何與range
Go 客戶端的操作員交互。
QoS 并不意味著“批量發(fā)送消息”,它對(duì)通道上未確認(rèn)消息的數(shù)量設(shè)置了限制。如果您要?jiǎng)h除d.Ack
代碼中的調(diào)用并for
無限期地運(yùn)行循環(huán),它只會(huì)運(yùn)行 5 次迭代,然后停止,因?yàn)?RabbitMQ 屆時(shí)將停止向您的消費(fèi)者傳遞消息。
我沒有查看代碼,但我假設(shè)您使用的 Go 客戶端是以這樣一種方式編寫的:一旦消息被接收和解碼,它就會(huì)被傳送到頻道msgs
。當(dāng)您在循環(huán)中確認(rèn)消息時(shí),它向 RabbitMQ 表明可以將另一條消息傳遞到該通道。
我建議重新編寫您的代碼以跟蹤通過通道傳遞了多少消息msgs
,完成您的工作,然后使用多重確認(rèn)同時(shí)確認(rèn)它們。
- 1 回答
- 0 關(guān)注
- 162 瀏覽
添加回答
舉報(bào)
0/150
提交
取消