SimpleAmqpClient: как прервать ожидание доставки сообщений в очередь

Я использую оболочку C++ rabbitmq-c ( SimpleAmqpClient) и использую синхронную версию получения сообщений от брокера, поскольку она более эффективна, чем асинхронная.

Итак, я звоню BasicConsumeMessage с таймаутом в 1 сек, например:

channel->BasicConsumeMessage(envelope, 1000);

Это хорошо работает до того момента, когда мне нужно изящно убить мое приложение, которое может иметь сотни каналов. Я не хочу уменьшать время ожидания, я хочу, чтобы это прерывание было похоже на переменные условия C++ std. Если бы я мог прервать это ожидание, поток, ожидающий этого вызова, BasicConsumeMessage немедленно вернусь к рулю. Есть ли способ, которым я могу это сделать? В настоящее время мне нужно полагаться на тайм-аут, и это может занять до 1 секунды в худшем случае канала (умножьте это на сотни...), в результате мое приложение завершает довольно много времени (с момента нажатия Ctrl+ С).

Я пытался позвонить BasicCancel во время ожидания этого вызова, но он застрял (возможно, в тупике) где-то внутри библиотеки, но это был всего лишь тест, поскольку нельзя ожидать отмены пользователя во время ожидания поступления сообщений.

0 ответов

Другие вопросы по тегам