Доброго :)
Отвечаю на вопросы
— чем концептуально отличается GearmanJob от GearmanTask и какой из них следует использовать для оформления отложенного задания?
Job — это то, что поступает воркеру.
Task — это то, что передает клиент
То есть клиент кидает Task на сервер очередей, там два агрумента — имя ф-и и сериализованные данные (в виде строки).
Если у воркера есть ф-я, указанная в Task, то есть он готов ее обработать, то он принимает задачу, а данные получает в виде Job.
Извлекаются данные вот так (кусок реального кода):
function create_campaign(GearmanJob $job){
$rawData = $job->workload();
$data = unserialize($rawData);
…
А передаются на сервер вот так (я использую не Task, а чуть проще — просто doBackground)
$gclient = new GearmanClient();
$gclient->addServer('localhost');
$new_offers = $client_db->select_new_offers();
if(is_array($new_offers) AND count($new_offers) > 0){
foreach($new_offers as $item){
$data_for_gearman = array(
'item' => $item,
'client_class_name' => 'axxa',
);
$gclient->doBackground('new_offer', serialize($data_for_gearman));
}
}
echo «Для добавления товаров на сервер очередей добавлено ».count($new_offers)." задач \n";