Thema: Delphi Fakturierungsserver

Einzelnen Beitrag anzeigen

psycodad

Registriert seit: 8. Feb 2005
Ort: Embrach (CH)
40 Beiträge
 
Delphi 10.3 Rio
 
#1

Fakturierungsserver

  Alt 4. Feb 2020, 14:17
Grüezi miteinander,

WIr haben hier ein gar nicht mehr so kleines Fakturierungsprogramm, das aus z.B. 100'000 Datensätzen eine Rechnung generiert. Dabei fallen viele Tasks an die meistens seriell getätigt werden müssen. Ich zähl mal grob auf:

1. Datenvalidierung
2. Rechnungskopf schreiben
3. Daten summieren zu Rechnungspositionen und Subpositionen usw.
4. Diverse Reporte (Fastreport) generieren
5. Reports per Mail versenden

Daneben gibt es noch ein paar weitere (ich nenn das jetzt mal Prozesse ) die so oder ähnlich abgearbeitet werden müssen. Im Moment sind die einzelnen Prozesse als moströse Prozeduren direkt im Desktop Programm (MDI-Devexpress Applikation) implementiert als richtig toll zu wartender Sphagetti Code (Ironie off). Da Problem daran ist dass ein solcher Prozess gut mal 5 Min. in Anspruch nehmen kann. Währendessen ist die Applikation so quasi eingefroren. Ich könnte jetzt jeden dieser Prozesse in einen TTask legen und schon ginge das besser. Aber eingentlich hat diese Arbeit gar nichts in dem Desktop Programm zu suchen. Ich möchte diese Verarbeitungsprozesse auslagern in einen Fakturierungsserver. Ein weiterer Grund dafür ist dass die Desktop App in einem Terminalserver läuft und dort so ziemlich viel CPU und RAM abzweigt wenn es ans Fakturieren geht. Deshalb soll das Fakturierungsserver-Programm auf einem anderen Server laufen.
Ich stelle mir vor das man vom Desktop Programm aus einen oder mehrere Jobs aufgibt. Der Fakturierugsserver trägt den Job in eine JobListe ein und liefert eine JobID zurück. Das Desktop-Programm pollt dann beim Fakturierungsserver mit dieser JobID von Zeit zu Zeit den Fakturierungsserver und fragt den Job-Status ab. Wenn Fehler auftreten kann der Desktop-Programm das Log des Jobs abholen und anzeigen.
Ich habe schon solche Sachen als (Webservice) SOAP-Server geschrieben. Das funktioniert gut.
Jetzt zu meiner Frage:
1. Ich würde gerne wissen ob es für die Implementierung einer solcher Task-Abarbeitungs-Maschine irgendwelche Design Patterns gibt? Ich hab da mal was von einer Statefull machine gehört, bin ich da richtig?
2. Gibt es da Librarys die einem dabei helfen können das elegant hinzukriegen (z.B. Spring4D oder so)? Oder ist das Overhead, macht man das mit Bordmitteln?

Ich würde mich über ein paar Tips und Anregungen freuen.
  Mit Zitat antworten Zitat