J'ai deux séries d'emplois: p>
Comment puis-je traiter tous les travaux dans set1 strong>, puis traiter les travaux dans set2 strong>? p>
J'ai essayé Il devrait traiter tous les travaux dans Set1 Strong> (A, B, C) et le processus de B et C ne devrait pas arrêter si le processus de travail a échoué.
Lorsque tous les emplois de L'ordre des emplois n'est pas une priorité ici. Ils peuvent être traités dans n'importe quel ordre. Je ne peux pas travailler avec Dispatch différé Strong> car le temps nécessaire pour traiter Set1 Strong> d'emplois varie très fortement. P>
La règle
3 Réponses :
Le chute d'emploi à Laravel est basé sur le fait qu'il n'exécutera pas les prochains emplois si l'on écrit actuellement.
Vous pouvez utiliser des événements. Chaque travail a 2 méthodes Par exemple: P> poignée () code> et échec () code>. Vous pouvez émettre des événements soit lorsque le travail est exécuté avec succès ou qu'il est échoué. Voir l'exemple ci-dessous: p> <?php
namespace App\Jobs;
use Exception;
use App\Something;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class JobA implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
protected $something;
/**
* Create a new job instance.
*
* @param Something $somethin
* @return void
*/
public function __construct(Something $something)
{
$this->something = $something;
}
/**
* Execute the job.
*
* @param AudioProcessor $processor
* @return void
*/
public function handle()
{
// Execute Job on something
event(new JobAHandled($something));
}
/**
* The job failed to process.
*
* @param Exception $exception
* @return void
*/
public function failed(Exception $exception)
{
// Send user notification of failure, etc...
event(new JobAFailed($something, $e));
}
}
Cela émettra des événements pour le travail spécifique. Comment puis-je savoir que tous les travaux de l'ensemble spécifique sont traités? Ce que j'essaie d'atteindre est le processus d'emploi D, E, F uniquement après que les emplois A, B, C sont traités.
@SrinatheddyDudi Avez-vous déjà trouvé une solution à ce problème?
@Isaiahiroko Non. Le plus proche que je puisse arriver, c'est retarder le traitement de SET 2 emplois avec le maximum de délai défini 1 emplois à compléter.
merci @srinathreddydudi. Pourrait tomber à cela finalement.
Une idée serait de créer un emploi jobset et un travail d'emploi d'emploi.
Donc, le jeu d'emploi prend votre nouveau travail professionnel ("A"), Jobworker ("B"), Jobworker ("C") comme argument, puis les envoie tous. p> et le travail "jobset" pour inspiration p>
Je pense que cela consiste à envoi d'un ensemble d'emplois. Ma question est de savoir comment traiter un ensemble d'emplois spécifique uniquement après que tous les travaux de l'ensemble précédent soient traités?
Vous pouvez les expédier à différentes files d'attente: et exécuter un travailleur qui garantit que Set1 est vide avant de vérifier SET2: P> php artisan queue:work --queue=high,low
Cela fonctionne pour une seule instance de chaque ensemble. Par exemple, s'il y a dix utilisateurs et ils ont envoyé des instances différentes de SET1 et SET2, les travaux de SET2 ne seront traités que si la file d'attente SET1 est vide. Cela signifie que les travaux de SET2 devraient attendre que tous les travaux de SET1 soient traités. Cela rend tous les travaux dans la file d'attente de chaque utilisateur pour attendre que tous les travaux de la file d'attente SET1 soient traités. Je souhaite qu'ils traitent les travaux dès que tous les travaux de Set1 File d'attente sont traités qui appartiennent à cet utilisateur. Pas avant que tous les travaux de Set1 File d'attente soient traités.
@SrinathreddyDudi Cela pourrait aider à mettre à jour la question, car il n'y a aucune mention des files d'attente en cours d'utilisateur. Si je vous comprends correctement, je ne peux pas imaginer pourquoi vous voudriez le faire de cette façon; Un exemple spécifique de la raison pour laquelle il doit fonctionner de cette façon pourrait être utile. Pourquoi la commande comporte-t-elle du tout si SET2 B> Les travaux d'un utilisateur spécifique sont autorisés à traiter, que leur SET1 B> a réussi? Si d'autres utilisateurs ajout de SET1 emplois sont retarder les travaux SET2 à partir de la transformation, vous ne pouvez pas simplement commencer plus de travailleurs afin que la file d'attente ne soit pas constamment pleine?