web-dev-qa-db-ja.com

RabbitMQを使用した.NET Coreマイクロサービス

プロジェクトにマイクロサービスアーキテクチャを使用する予定です。選択されたテクノロジースタックは.NET Coreで、DockerRabbitMQが単純なサービスバスとして使用され、Linuxにデプロイできるはずです。

PaymentサービスとOrderサービスがあるとします。これらの各サービスでRESTエンドポイントを公開します。そのため、これら二つのサービスを.NET Core Web APIsとすることを考えました。

しかし、問題はRabbitMQを使用したサービス間通信です。新しいorderを取得したら、RabbitMQを使用してイベントを公開し、Paymentサービスでそのイベントをリッスンして、特定の操作(データベースの更新)を実行します。しかし、これらはWeb APIsであるため、私が説明したようにイベントを聞くことは可能ではないと思います。 (イベントをサブスクライブするには、コンソールアプリケーションのようなものを使用する必要があるかもしれません。)

システムのスケーラビリティと拡張性を考慮したベストプラクティスを使用してこれを実現するための最も実行可能な方法を見つけたいと思います。

10
PIKP

.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 で言及しています。これは、実装方法の です。

11
Andrii Litvinov