, но все равно получаю только одно сообщение, а не пакет из пяти.что я делаю не так?
Вы не понимаете, как работает RabbitMQ и QoS / prefetch ( docs ) или как он взаимодействует с оператором range
оператораGo client.
QoS не означает «отправка сообщений партиями», оно устанавливает ограничение на количество неподтвержденных сообщений на канале.Если бы вы удалили вызов d.Ack
в своем коде и запустили цикл for
на неопределенный срок, он запустился бы только на 5 итераций, а затем остановился бы, потому что RabbitMQ к тому времени прекратил бы доставку сообщений вашему потребителю.
Я не проверял код, но я предполагаю, что используемый вами клиент Go написан таким образом, что, как только сообщение получено и декодировано, оно доставляется на канал msgs
.Когда вы подтверждаете сообщение в цикле, это указывает RabbitMQ, что на этот канал может быть доставлено еще одно сообщение.
Я предлагаю переписать ваш код, чтобы отследить, сколько сообщений было доставлено через msgs
канал, выполняйте свою работу, а затем используйте множественное подтверждение , чтобы подтвердить их всех одновременно.
ПРИМЕЧАНИЕ: Команда RabbitMQ отслеживает список рассылки rabbitmq-users
и только иногда отвечает на вопросы по StackOverflow.