2 Stimmen

Web-Api: Beim Erhalten einer Anfrage - geben Sie eine Antwort, aber führen Sie dann weiterhin eine Aufgabe im Zusammenhang mit der Anfrage aus

Wir haben einen serverbasierten Web-API-Server, und die Benutzer stellen Anfragen.
Viele Anfragen haben Konsequenzen, die über die Antwort hinausgehen, die wir dem Benutzer geben müssen.
Daher möchten wir dem Benutzer die Antwort geben und dann mit der Verarbeitung der Auswirkungen fortfahren.

Manchmal müssen diese "nächsten Schritte" schnell erfolgen. Manchmal können wir etwas warten.

Ich habe an die folgenden Optionen gedacht:

  • Vor der Antwort - öffnen Sie einen anderen Thread für den Job
    Aber es erscheint mir sehr teuer und funktioniert vielleicht nicht einmal.

  • Vor der Antwort - stelle den Job in eine Warteschlange, die zuhört
    Aber es erscheint mir, dass dies die Ausführung zu sehr verzögern könnte

Habe ich recht? Liege ich falsch?
Was sind die Richtlinien/Best Practices für diese Art von Fragen

1voto

Sławomir Rosiek Punkte 4018

Ich denke, dass der beste Weg, um Hintergrundverarbeitung in diesem Fall durchzuführen, darin besteht, eine Warteschlange zu verwenden, z.B. Azure WebJobs oder vielleicht etwas Komplexeres wie NServiceBus. Sie müssen nur eine Nachricht/Bestellung verarbeiten und eine Antwort zurückgeben, die den Benutzer informiert, dass diese Bestellung akzeptiert wurde. Es gibt sogar einen speziellen HTTP-Code (202) für solche Aktionen.

Ein weiterer Thread zu öffnen ist nicht so gut, weil man die Kontrolle darüber verliert. Es gibt keine einfache Möglichkeit, das zu überwachen. Was ist, wenn dieser Thread abstürzt oder der Anwendungspool zurückgesetzt wird? Sie verlieren alle Daten, und der Benutzer wird ewig warten. Es ist einfach nicht zuverlässig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X