2017-06-05 9 views
0

私は電子メールを作成して顧客に送信するサービスAを持っています。顧客は電子メールを受信し、最終的に身体のリンクをクリックしてサービスBを起動します。spring cloud sleuth:手動で起動される非同期サービス

同じビジネスプロセスの一部である完全に分離された2つのサービスを比較するにはどうすればよいですか?

スパンを「開いたまま」にするか、電子メールにトレースIDを「埋め込む」方法がありますか?

答えて

0

たとえば、TraceableExecutorServicehttp://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html#_executor_executorservice_and_scheduledexecutorservice)と呼ばれるExecutorServiceのトレース表現を使用して、非同期通信(http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html#_asynchronous_communication)を使用できます。あなたは、別のスレッドでデータを処理する完成可能な未来を放ちます。ある時点であなたがブロックし、次にデータを取得できます。 ExecutorServiceのトレース表示は、トレースデータの受け渡しを処理します。

更新: しかし、これらは完全に2つの別々のプロセスである場合、私はスパンを閉じて、誰かがリンクをクリックすると完全に別のスパンを作成します。スパンを明示的に開いたままにしてはいけません。 2つのプロセスをバインドするものがトレースIDになります。 Zipkinは、UIの観点からできる限り最善の方法でこれらの長い生きている仕事をサポートしていませんが、それを改善するために進行中の作業があります(いわゆるリンクスパンを介して)

+0

まさにこれらは2つしたがって、完全に分離されたサービスであるため、それらを結びつけるものがトレースIDであることが完全に理解されます。唯一のことは、第二のサービスが電子メールの本文のリンクからユーザーによって時間内にランダムに起動されるため、トレースIDを渡す方法がわからないことです。これは、お互いに話し合ったり、データパイプに反応している典型的なマイクロサービスのパラダイムではありません。これらのサービスは完全に無関係ですが、同じトレースIDをログに表示する必要があります。 – pgs

+0

あなたはこの情報をどこかに保存しなければなりません - 残念ながら、他の方法はありません:/あなたはおそらくメールリンクに(ハッシュ?)traceidを渡すことができますか? –

+0

それは私の最初の推測でした。この場合、私は本当にそれを保存するか、それを渡す必要があります。アノテーションやエグゼキュータに頼るのではなく、コード全体にわたって宣言的にトレースとスパンを使用することをお勧めしますか? – pgs

関連する問題