2017-11-28 2 views
0

分散アーキテクチャをPythonから.NetCoreに移行しています。このアーキテクチャには、要求をサービスバス(KAFKA)にプッシュするゲートウェイAPIがあります。要求はマイクロサービスによって処理されます。これらのマイクロサービスは、要求オブジェクトに設定されているトピックについて、ゲートウェイ(クライアント)に応答します。 トピック名は、pythonアプリケーション(Flask/uwsgi)のprocess_idに基づいてビルドされています。Messaging System(kafka/.NET)によるリクエスト/レスポンス戦略

しかし、.NetCore Webapiアプリケーションでは、そのプロセスからトピックを取得する方法が見つかりませんでした(私は.NetCoreで始まります)。マイクロサービスの回答を待っている間にAsyncメソッドを使用してエントリポイントを解放すると、Assembly IDの種類に基づいてトピック名を生成するのが最適です。しかし、すべてのAsycメソッド呼び出しは、異なるトピックを生成するでしょう、そうですか?それは話題の数が多い...奇妙な種類...

他の方法はありますか?

私はMemoryCacheを使用してMicroservicesとゲートウェイプロセスからの回答を通信することを考えています。 (要求にはメモリキャッシュアクセスのキーとして使用されるGuidが含まれています)。どう思いますか?

+0

なぜ、プロセスIDを使用し続けるのはなぜですか? '' 'p' 'System.Diagnostics.Process.GetCurrentProcess();' '' '' 'p.Id.ToString();' '' – Martin

+0

'タスク'と非同期の処理方法がわかりません.NETの関数です。 PythonとプロセスIDへの関心は、かつては始まったプロセスIDが決して変わらないということでした。その場合、1つのプロセスで常に1つのトピックしか管理できません。 .NETでは、潜在的な '' FetchClientResponseAsync()を呼び出すことは新しいプロセスを生成し、新しいトピックにつながると思います。複数のアクセスは多くのトピックにつながります。私はそれほど心配していません。(可読性は、ほんのわずかなメッセージに限られています...) – fredczj

答えて

0

このコードは同じ番号を出力するため、タスクはメインプロセスのprocess_idを継承します。おそらくthread_idは異なるでしょう。

また、process_idではなくGUIDの使用を検討することもできます。ちょっとした考え。

using System; 
using System.Threading.Tasks; 

namespace ConsoleApp1 
{ 
    class s 
    { 
     public s() { } 
     static void Main(string[] args) 
     { 
     Console.WriteLine(System.Diagnostics.Process.GetCurrentProcess().Id); 
     Task.Run(async() => { bool x = await Go(); }).GetAwaiter().GetResult(); ; 
     } 

     private static Task<bool> Go() 
     { 
     Console.WriteLine(System.Diagnostics.Process.GetCurrentProcess().Id); 
     return Task.FromResult<bool>(false); 
     } 
    } 
} 
+0

ありがとうございます。その後、私のWebアプリケーションが別のクライアント要求を受信して​​管理することを可能にし、接触サービスにつながる可能性があり、同様の受信応答ループを開始することに同意しますか?この方法では、同じトピックについて同じ種類の応答を待つ2つのタスクがあり、潜在的な破損につながるでしょうか? – fredczj

+0

また、Guidは一意の値を生成します。これは、各タスクがプライベートレスポンスを収集するのに役立ちます。結果が膨大な量のトピックにつながる場合でも、これはより良いでしょう。 – fredczj

+0

あなたのアプリケーションの私の限られた理解に基づいて、はい、私は同じトピック(process_id)を待っている2つのタスクを見ることができます。 GUIDは世界的にユニークです。グローバルの範囲は非常に広いですが、アプリケーション内で確実に一意になります。 – Martin