In coda come conservare le richieste?

2

Ultimamente sto lavorando con le code di Laravel. Ho installato tutto e funzionato bene. Quello che vedo è che eseguo una richiesta http sul mio sistema, i controllori gestiscono la richiesta emettendo un modello con i dettagli della richiesta come parametri. Il modello è iniettato nel lavoro, quindi lavoro + dati (modello) sono serializzati nella mia coda. (Sto usando DB come driver per avere una migliore visibilità di ciò che sta accadendo)

Qui viene il mio dubbio, suppongo che il "modello" di coda abbia lo scopo di una posizione temporanea per memorizzare la richiesta da eseguire e il ripulire.

Ma quale sarebbe l'approccio per configurarlo per capire cosa è successo negli ultimi X giorni alle richieste? (Devo memorizzare i miei modelli al momento della creazione nella tabella DB corrispondente prima di iniettarli in Jobs?)

So già che esiste la possibilità di configurare una memoria failed_queue. Vedo che c'è solo una gestione dei guasti (con Event)

Ma che ne dici di essere sicuri che qualcosa sia stato elaborato? O forse la coda dovrebbe essere come se accettassi richieste e consegnassi (non ti dispiace memorizzare il successo?)

class MailQueueController extends Controller
{
    public function queue(Request $request)
    {
        $mailQueue = new MailQueue();

        $mailQueue->batch_id = 1;
        $mailQueue->email_id = 401;
        $mailQueue->email_address = '[email protected]';
        $mailQueue->json_data_input = '{"hi":"1"}';

        $mailQueue->created_at = Carbon::now()->toDateTimeString();

        /////////////////////////////////
        /// should I?
        /////////////////////////////////
        $mailQueue->save();

        //immediate
        dispatch(new ProcessEmailQueue($mailQueue));
    }
}
    
posta koalaok 09.11.2016 - 09:55
fonte

2 risposte

2

Ho trovato il problema. Sì, devo salvare il modello Eloquent (se si utilizza un modello eloquente) iniettato in JOB.

Leggere meglio la documentazione dice:

"Se il lavoro in coda accetta un modello Eloquent nel suo costruttore, solo l'identificatore per il modello verrà serializzato sulla coda. Quando il lavoro viene effettivamente gestito, il sistema di coda recupererà automaticamente l'intera istanza del modello dal database ".

Quindi devi salvarlo, altrimenti non troverà il riferimento.

E anche questo risponde alla mia domanda: come tracciare le richieste. (Avendoli salvati come oggetti Eloquent, ovvero recordset Db).

Ci scusiamo per il disturbo. Ma forse questo aiuterà qualcun altro.

    
risposta data 09.11.2016 - 11:15
fonte
0

Il modo "queuey" per fare ciò è avere un fan fuori dal tuo messaggio iniziale

incoming T-> worker
         |
         L-> reporting tasks

Ciò ti consente di allegare processi aggiuntivi al tuo flusso in qualsiasi momento.

Ma per quello che stai parlando di registrazione dal tuo lavoratore è probabilmente sufficiente. Guarda alcune delle grandi soluzioni di registrazione di stile dei dati come logstash

    
risposta data 09.11.2016 - 10:25
fonte

Leggi altre domande sui tag