Ответ
moko 15.09 02:08
Прервать consume можно, есть метод stop_consume.
По остальному сделана доработка:
У метода consume теперь два ясно разделённых режима: опрос (без $.callback[] - разовый запрос "дай что есть") и подписка (с $.callback[] - постоянное прослушивание очереди). Раньше границы между ними были смазаны: опрос мог неожиданно зависнуть в ожидании сообщения, которого нет, вместо того чтобы сразу сказать "пусто"; а у подписки опция count вообще ничего не делала, ограничить время простоя было нечем.
Оба режима управляются одинаково двумя параметрами: count (сколько сообщений нужно) и timeout (сколько ждать), с одной и той же логикой значений (0 - не ждать/не годится, -1 - без ограничений, N - число). У опроса дефолты настроены на "дай что есть сейчас, не жди" - для разовой проверки очереди в скрипте. У подписки - "жди и слушай, пока не остановят" (stop_consume), как и задумывалось для долгоживущих процессов, но теперь можно явно задать, сколько ждать тишины перед выходом или сколько сообщений обработать и остановиться - без ручной возни. И подписка больше не глотает настоящие ошибки связи молча: они теперь долетают до скрипта как исключение, ровно как в опросе.
Кроме того, подтверждение получения сообщения (ack) теперь по умолчанию ручное, а не автоматическое - ручной ack общепринятая норма в библиотеках на других языках. Иначе есть риск незаметно терять задачу, если скрипт падет между получением сообщения и его обработкой.