プロジェクトにマイクロサービスアーキテクチャを使用する予定です。選択されたテクノロジースタックは.NET Core
で、Docker
とRabbitMQ
が単純なサービスバスとして使用され、Linux
にデプロイできるはずです。
Payment
サービスとOrder
サービスがあるとします。これらの各サービスでREST
エンドポイントを公開します。そのため、これら二つのサービスを.NET Core Web APIs
とすることを考えました。
しかし、問題はRabbitMQ
を使用したサービス間通信です。新しいorder
を取得したら、RabbitMQ
を使用してイベントを公開し、Payment
サービスでそのイベントをリッスンして、特定の操作(データベースの更新)を実行します。しかし、これらはWeb APIs
であるため、私が説明したようにイベントを聞くことは可能ではないと思います。 (イベントをサブスクライブするには、コンソールアプリケーションのようなものを使用する必要があるかもしれません。)
システムのスケーラビリティと拡張性を考慮したベストプラクティスを使用してこれを実現するための最も実行可能な方法を見つけたいと思います。
.NET Coreでアプリケーションを作成する場合、bootstrap thing in Main
method)を登録し、サービスとミドルウェアをStartup
クラスに登録します。 Webホストでは、メッセージングサービスを作成して開始することもできます。
public class MessageListener
{
public void Start()
{
// Listen to rabbit QM and all the things.
}
}
public static void Main(string[] args)
{
// Listen to messages.
var messaging = MessageListener();
messaging.Start();
// Configure web Host and start it.
var Host = new WebHostBuilder()
...
.Build();
Host.Run();
}
UPDATE:
ASP.NET Core 2.0では、同じ目的を達成するためにIHostedService
インターフェイスが導入され、このシナリオについて announcement で言及しています。これは、実装方法の 例 です。