Come abbinare due errori dalle diverse fonti nel database?

1

Dire che sto scrivendo un'applicazione complessa costituita da 3 parti: Servizi (Web API), Pianificatore (servizio Windows) e Web (Progetto MVC). Condividono tutti lo stesso DB. I servizi vengono utilizzati solo per la pubblicazione di dati nel DB. Il Web è usato per interagire con DB: visualizza dati, lo modifica, imposta alcuni flag in esso. Scheduler ha diversi lavori in esso che esegue alcune azioni in base ai dati e ai flag nel DB (inviare e-mail, magari postare alcune cose ad alcuni servizi web - inclusi i nostri Servizi). Tutte queste parti funzionano in modo indipendente, non sanno nulla l'una dell'altra, anche se sto usando la stessa tabella db.Log per la registrazione.

Immaginiamo che come parte del mio lavoro di pianificazione, inserisco qualcosa nei Servizi.

public void MyHourlyJob(IDBContext db, IWebService service, ILogger logger)
{
    var files = db.GetUnsentFiles();
    foreach(var file in files)
    {
        try
        {
            bool success = service.Post(file);
            if(success)
                logger.Log($"file {file.Name} was posted");
            else
                logger.Log($"something on the back end went wrong while posting {file.Name}")
        }
        catch(Exception ex)
        {
            logger.Log(ex);
        }
    }
}

Diciamo che se l'errore si è verificato nei Servizi, l'ho effettuato il login e poiché il risultato del post dell'Utilità di pianificazione non ha avuto esito positivo, accedo anche che è successo qualcosa nel back-end. Nel DB avrò due registri dello stesso errore, uno dallo Scheduler (uno generale) e uno dai Servizi (quello dettagliato). Il fatto è che per il debugging e il mantenimento degli scopi, devo abbinare questi due nel database.

Quali principi di progettazione dovrei seguire per essere in grado di farlo?

    
posta nicks 13.10.2016 - 15:27
fonte

1 risposta

1

Come parte del tuo messaggio (intestazione), aggiungi un'informazione sul pezzo che può essere inclusa come parte del carico utile.

Si potrebbe chiamare questo un ID di correlazione. Fa parte del contesto del messaggio. Questo ID può essere un GUID. Poiché le informazioni viaggiano attraverso i diversi sistemi e livelli, utilizzare questo ID per scopi di registrazione.

Quindi, è possibile interrogare facilmente tutti i messaggi con lo stesso GUID (ID) e ottenere vari messaggi e raggrupparli insieme.

Il client o il primo sistema che genera la richiesta può generare l'ID che viene passato attraverso vari livelli di servizi downstream.

    
risposta data 13.10.2016 - 17:43
fonte

Leggi altre domande sui tag