2016-06-16 4 views
1

Meine Anwendung enqueue Jobs mit dem ArgumentWie kann der Argumentwert in den Details des Erfolgsjobs ausgeblendet werden?

List<SomeClass> 

wo Someclass von JSON von newtosoft Json.NET deserialisiert wird. Wie folgt aus:

BackgroundJob.Enqueue(() => myJob.jobStartMethos(List<SomeClass> argument)); 

Wenn offen Erfolg Job Details Ich sehe schon:

MyJobClass myJob = Activate<MyJobClass>(); 
myJob.jobStartMethod(
new { FromJson<SomeClass>("json string"), FromJson<SomeClass>("json string"), FromJson<SomeClass>("json string"), FromJson<SomeClass>("json string"), FromJson<SomeClass>("json string"), FromJson<SomeClass>("json string") ... etc... 

Dieses Argument ist zu groß und verhindert, dass wirklich Details zu sehen. Wie kann ich das beheben? Ich habe versucht, toString() in meiner SomeClass zu überschreiben, aber das hilft nicht. Und ich habe versucht

JobHelper.SetSerializerSettings(new JsonSerializerSettings 
      { 
       TypeNameHandling = TypeNameHandling.None 
      }); 

Aber das hilft nicht.

+2

Ich bin nur neugierig, welche Werte passieren Sie dort? Große Hintergrundjobargumente sind im Allgemeinen eine schlechte Übung. – odinserj

+0

Ich habe einen wiederkehrenden Job in Hangfire. Dieser Job wird alle 15 Minuten ausgeführt und fragt CRM nach REST-API ab, um die neuesten aktualisierten Objekte abzurufen (CRM ist zu groß und eine solche Interaktion ist der einzig mögliche Weg). Dieses Objekt enthält eine Beschreibung, einen Verlauf usw. Nach der Deserialisierung von Objekten aus der CRM-Antwort wurde JSON dann als Argument für Hintergrundjobs bereitgestellt. Hintergrund-Jobs, die Änderungen im Objekt untersuchen und auf eine bestimmte Art reagieren (Änderungen vornehmen, in anderen Systemen warnen) Hintergrund-Jobs sind zu viele. Zur Kontrolle dieser Arbeit habe ich genau model.listen (objects) als Hintergrundjobs verwendet statt async run model.listen (objects) – sintasy

+0

Aber was ist, wenn Sie eine andere Tabelle erstellen, die Werte dort ablegen und an Hangfire nur die Kennung eines neuen Datensatzes übergeben (und löschen eine Aufzeichnung nach der Verarbeitung)? Auf diese Weise können Sie Ihre Methoden auch idempotent machen. – odinserj

Antwort

0

Ja, speichern Sie große Job-Argumente in der Datenbank und führen Job wie JobClass.fromDatabase (Zeilen-ID) ist eine gute Lösung. Wenn zum Beispiel der Job fehlgeschlagen ist, wissen Sie mehr und können den Job mit alten Argumenten zurückstellen (was dazu führte, dass der Job fehlschlägt).

Verwandte Themen