2015-10-27 1 views
1

J'utilise Beanstalkd (avec - https://github.com/udokmeci/yii2-beanstalk) pour les files d'attente. Mais je dois définir le délai personnalisé pour nouvelle tentative suivante,Délai de tâche personnalisée Beanstalkd pour les 2ème et 3ème tentatives

1er - sans délai 2 - dans une heure 3th - en 24 heures

Est-il possible de mettre en œuvre ce avec beanstalkd?

public function actionCron($job) 
{ 
    $sentData = $job->getData(); 
    try { 

     // I need to setup custom delay there 
     // 1 hour after 1st retry 
     // 24 hrs after 2nd retry 

     return self::DELAY; 

    } catch (\Exception $e) { 
     //If there is anything to do. 
     fwrite(STDERR, Console::ansiFormat($e . "\n", [Console::FG_RED])); 

     // you can also bury jobs to examine later 
     return self::BURY; 
    } 
} 

Répondre

0

Il est tout à fait possible - en demandant au serveur Beanstalkd des statistiques sur le travail.

A partir du fichier Beanstalk protocol.txt:

stats-job <id>\r\n 

Les données renvoyées comprennent le nombre de fois que le travail a déjà été réservés, libérés, et dont le tube nom etc. Vous pouvez utiliser toutes les données est le plus approprié pour le remettre en file d'attente au besoin. Etant donné que vous ne pouvez pas modifier les données pour les retarder, créez uniquement un nouveau travail, vous pouvez le placer dans une nouvelle file d'attente pour une 2ème ou 3ème tentative, avec un délai initial approprié, puis si le travail a provenir d'une nouvelle tentative (après la première ou la deuxième tentative), modifier le délai initial avant de l'exécuter à nouveau. Comme vous pouvez essayer d'obtenir un travail à partir de plusieurs files d'attente, vous aurez juste votre code regarder la file d'attente principale, et également les tubes 2e/3e-tentative et voir ce qu'ils sont donnés, le traitement approprié.