2017-06-05 3 views
0

Ich habe einen Dienst A, der eine E-Mail erstellt und sie an einen Kunden sendet. Der Kunde erhält die E-Mail und klickt schließlich auf den Link im Body, um Service B auszulösen.spring cloud sleuth: manuell ausgelöste Async-Dienste

Wie kann ich zwei verschiedene und vollständig isolierte Services, die Teil desselben Geschäftsprozesses sind, mit sleuth korrelieren?

Sollte ich die Spanne "geöffnet" lassen oder gibt es eine Möglichkeit, die Trace-ID irgendwie in die E-Mail einzubetten?

Antwort

0

Sie können die asynchrone Kommunikation (http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html#_asynchronous_communication) beispielsweise über eine Ablaufverfolgungsdarstellung des ExecutorService namens TraceableExecutorService (http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html#_executor_executorservice_and_scheduledexecutorservice) verwenden. Sie geben eine komplette Zukunft aus, die die Daten in einem separaten Thread verarbeitet. Irgendwann blockierst du und dann kannst du die Daten abrufen. Die Ablaufverfolgungsdarstellung der ExecutorService wird für die Weitergabe der Protokollierungsdaten sorgen.

UPDATE: Wenn dies jedoch vollständig zwei separate Prozesse sind, dann würde ich die Spannweite schließen und eine völlig separate Spannweite erstellen, sobald jemand auf den Link klickt. Sie sollten Bereiche niemals explizit offen lassen. Was die 2 Prozesse bindet, ist die Trace-ID. Zipkin unterstützt diese langwierigen Aufgaben noch nicht optimal aus der Sicht der Benutzeroberfläche, aber es wird gerade daran gearbeitet, sie zu verbessern (über so genannte verknüpfte Bereiche).

+0

Genau, das sind zwei vollständig getrennte Dienste, daher ist es absolut sinnvoll, dass das, was sie bindet, die Trace-ID ist. Die einzige Sache ist, dass ich nicht sicher bin, wie man die Verfolgung Identifikation übergibt, da der zweite Service zeitlich zufällig vom Benutzer vom Link auf dem email Körper ausgelöst wird. Dies ist kein typisches Microservices-Paradigma, bei dem Services miteinander kommunizieren oder auf Datenleitungen reagieren. Diese Dienste sind völlig unabhängig, aber sie sollten die gleiche Ablaufverfolgungs-ID in den Protokollen anzeigen. – pgs

+0

Sie müssen diese Information irgendwo speichern - es gibt keinen anderen Weg, leider:/Sie können den (hazed?) Traceid vielleicht in der E-Mail-Link übergeben? –

+0

Das war meine erste Schätzung. In diesem Fall muss ich es wirklich speichern oder weitergeben. Würden Sie dann empfehlen, Traces und Bereiche deklarativ im Code zu verwenden, anstatt sich auf Annotationen und Executoren zu verlassen? – pgs

Verwandte Themen