SimpleAmqpClient: как прервать ожидание доставки сообщений в очередь
Я использую оболочку C++ rabbitmq-c ( SimpleAmqpClient) и использую синхронную версию получения сообщений от брокера, поскольку она более эффективна, чем асинхронная.
Итак, я звоню BasicConsumeMessage
с таймаутом в 1 сек, например:
channel->BasicConsumeMessage(envelope, 1000);
Это хорошо работает до того момента, когда мне нужно изящно убить мое приложение, которое может иметь сотни каналов. Я не хочу уменьшать время ожидания, я хочу, чтобы это прерывание было похоже на переменные условия C++ std. Если бы я мог прервать это ожидание, поток, ожидающий этого вызова, BasicConsumeMessage
немедленно вернусь к рулю. Есть ли способ, которым я могу это сделать? В настоящее время мне нужно полагаться на тайм-аут, и это может занять до 1 секунды в худшем случае канала (умножьте это на сотни...), в результате мое приложение завершает довольно много времени (с момента нажатия Ctrl+ С).
Я пытался позвонить BasicCancel
во время ожидания этого вызова, но он застрял (возможно, в тупике) где-то внутри библиотеки, но это был всего лишь тест, поскольку нельзя ожидать отмены пользователя во время ожидания поступления сообщений.