Seit Lektion 4.12.1 fragt die Kladde ihre Ausschreibungen über das Netz. Das Labor dort endete mit einer Zeile, die es im Monolithen nicht gab: „Dienst gestoppt: HttpRequestException, ConnectionError“. Diese Lektion klärt, was ein Aufrufer mit dieser Zeile anfängt. Die wichtigste Antwort ist dabei oft nicht ein besserer Aufruf, sondern gar keiner: Wer die Daten, die er braucht, selbst besitzt, muss im entscheidenden Moment niemanden fragen.

Zwei Arten zu reden

Zwischen Diensten gibt es zwei Grundformen. Sie unterscheiden sich weniger in der Technik als darin, wer auf wen wartet:

Anfrage mit Antwort (synchron) Nachricht (asynchron)
Technik in der Kladde HTTP mit JSON, gRPC Service Bus: Queue für Befehle, Topic für Ereignisse
Wer wartet? der Aufrufer, bis die Antwort da ist niemand; der Absender gibt die Nachricht ab und macht weiter
Müssen beide laufen? ja, im selben Augenblick nein; die Nachricht wartet in Service Bus
Typischer Inhalt eine Frage („welche Ausschreibungen passen?“), ein Befehl mit sofortigem Ergebnis ein Ereignis („Ausschreibung importiert“), ein Befehl, dessen Ergebnis später kommt
Was bei einem Ausfall geschieht der Aufrufer bekommt einen Fehler und muss jetzt entscheiden die Nachricht wird später zugestellt, mindestens einmal (Lektion 4.6.1)

Die Faustregel: Fragen synchron, Ereignisse asynchron. Wer eine Antwort braucht, um seiner Person gerade etwas zu zeigen, fragt. Wer anderen mitteilt, dass etwas geschehen ist, schickt ein Ereignis und wartet auf niemanden. Ein Befehl liegt dazwischen: „Reserviere diese Ausschreibung“ kann synchron sein, wenn die Person auf das Ergebnis wartet, oder eine Nachricht, wenn das Ergebnis später kommen darf.