私はモノリシックなWebアプリケーションをマイクロサービス(各サービスは独自のデータベースを持っています)に変換するためのpersonnalプロジェクトに取り組んでいます。相互通信マイクロサービス - どのように?
この時点で、MonolithicバックエンドはNodeJSで作成され、REST要求に応答することができます。 アプリケーションを複数のサービスに分割し始めたとき、私は次の問題に直面しました。それらの間のコミュニケーションをうまくいかにするには?
まず、私は次の例でREST呼び出し使用してみました:それを持続するためには、「ユーザーサービス」に 「登録サービス」は、そのデータベースに面白いものを挿入し、順方向(HTTPのPOST)ユーザー情報を「ユーザ」データベースに格納する。 この例から、2つのサービス、つまり2つのデータベースがあります。
私はこの瞬間にを認識しました。それは良い選択ではありませんでした。私の "登録サービス"は "ユーザサービス"に依存しているからです。彼らは一種のものであり、これは(私が読んだところから)ミクロサービス概念の反パターンです。
2番目のアイデアは、メッセージブローカー(RabbitMQなど)を使用することでした。 「登録サービス」は依然として興味深いものを独自のデータベースに挿入し、ユーザー情報をデータとしてキューにメッセージを発行します。 "User Service"はこのメッセージを消費し、データを "user"データベースに保存します。この概念を使用することにより、両方のサービスが完全に分離され、素晴らしいアイデアになる可能性があります。
BUT、クライアントに送信する応答(誰が "サービス登録"をリクエストしたか)最初のアイデアで「200を送ることができました、すべてが大丈夫です!それは問題ではありません。 2番目の考えでは、消費者(「ユーザーサービス」)がユーザーデータを保持しているかどうかわからないので、クライアントに返信する必要はありますか?
ウェブアプリケーションのショップ側でも同じ問題があります。クライアントは、購入したい商品を「注文サービス」に投稿します。これは、彼が "ユーザサービス"に持っているバーチャルマネーをチェックし、ユーザが十分な金額を持っているならば、 "デリバリサービス"に製品詳細を転送する必要があります。完全に隔離されたサービスでそれを行うには?
私はメッセージブローカで非同期要求/応答を行うためにクライアントからhttp要求時間を使いたくありません。
私の一部を啓発してくれることを願っています。
この記事を読む:http://stackoverflow.com/questions/30213456/transactions-across-rest-microservices –