Доброго времени суток. Опишу задачу: есть некое приложение, которое шлет запросы к API vk . При определенной частоте запросов API отвечает ошибкой с текстоом что лимит запросов в секунду превышен. Решил что для решения ограничения количества запросов в секунду к API внешних сервисов можно использовать сервере очередей Gearman. Установил, настроил, потестил на тестовых примерах - вроде бы работает. При этом как управлять очередью я так и не понял . Есть клиент, который создает таск и есть воркер который таск обрабатывает. В теории мне в промежутке между воркером и клиентом нужен отдельный слорй, который бы проверял количество задачь в работе. Но как это реализовать я что-то вот совсем не могу понять. Кто работал с очередями gearman - прошу помощи
Казалось бы, причём здесь Gearman. Он сам не даёт тебе средство для управления частотой запросов. То есть он не решает задачу. Зачем тогда это звено вообще? --- Добавлено --- Давай нарисуем каркас что должно вообще происходить. Есть некий цикл, не будем вдаваться в детали как он огранизован, это может быть очередь гирман или буквально цикл в процессе-демоне. на каждой итерации цикла делается новый запрос. Ну добавь туда контроль "сколько запросов было сделано за последние N сек/часов/и т.п." и а случае если это число + 1 превышает заданный лимит, то пропускаем задачу (continue, fail()... зависит от реализации).
на сколько я понимаю, возможно ошибаюсь, сервер очередей как раз дает возможность решения проблемы с распределением очередей запросов к API . В случае с Gearman не уверен, по этому и создал топик.
Очереди позволяют распределять нагрузку, не ждать ответа в одном процессе, а делегировать работу куда-то ещё. Принцип "выстрелил и забыл". То что ты описал - ограничение пропускной способности - возможно кто-то и решал для воркера. Это точно не прямая задача Gearman. Можешь в воркере проверять счетчик и отказываться от работы.