私は、ASP.NETコアWeb APIを使用してマイクロサービスアーキテクチャを作成しています。すべてのサービスは互いに分離されており、異なる環境で展開される可能性があります。すべてのサービスには独自のログがあります。これらのサービスを介して要求が流れると、サービスのいずれかで失敗する可能性があります。たとえ複数のサービスを経由する場合でも、一連のイベントをソースに追跡する方法が必要です。
この問題を処理するために、要求を発行したサービスがCorrelationIdを作成し、それを次のサービスに渡します。 2番目のサービスは3番目のサービスなどに渡します。例外が発生した場合、対応するサービスはCorrelationIdとともに例外メッセージを記録します。マイクロサービスアーキテクチャにCorrelationIdを含めるにはどうすればよいですか?
サービスの呼び出し元が相関IDを渡すのに最適な場所は何ですか?
呼び出し側は、これがあれば上記のアプローチで
public class RequestDTO
{
public string CorrelationId {get;set;}
public string SomeOtherData {get;set;}
}
public Service2Controller:Controller
{
public Task<in> DoSomething(RequestDTO request)
{
// add the correlationid in current request Items collection
// So global exception handling can access it and log it
// along with the exception
HttpContext.Items.Add("CorrelationId", request.CorrelationId);
}
}
と呼ばなっているサービスであるHttpHeaderにCorrelationIDのか、それは一部のメソッドのパラメータとして渡す必要があり
以下のようなものを渡す必要がありますこのメソッドを呼び出す前に例外があり、CorrelationIdはロギングのグローバル例外ハンドラで使用できません。
提案がありますか?または代替の方法
デシリアライズ時などの問題を回避するため、カスタムヘッダーは通常ですが、ペイロードにも渡さないようにしてください。両方を持つことはできません。 –
@TomRedfernは、httpヘッダーにカスタムデータを追加するのは '典型的なのですか? – LP13
@TomRedfern各サービスは、さまざまなタイプの環境に展開できます。私の懸念は、httpヘッダーにカスタムデータを追加することが、ホストサーバーによって拒否される可能性があるということです。ホスティングサーバーは通常、不明なヘッダーをチェックしますか? – LP13