依存microserviceを呼び出します

devoxy:

サービス1とサービス2:レッツは、私は2 microservicesを持っていると言います。それらのそれぞれが独自のデータベースを持っています。サービス1は、エンティティAとサービス2はEntityBを持っています

EntityA {
    Long id;
    //other fields
    EntityB entity;
}

EntityB{
     //other fields
}

私は、データを取得し、保存するためのSpringのRestTemplateを使用しています。彼らはサービス2のDBに保持されているように私はEntityBのデータを持っていないサービス1のデータベースからエンティティAを取得するとき、私はサービス2のDBからEntityBを取得するためにRestTemplateを経由して、残りの呼び出しを行う必要があることを理解するが、何の関係について:問題があります実体は - エンティティAは、まだそのフィールドは、ほとんどのIDを除く時間のヌルであっても内部全体EntityBオブジェクトを持っている必要がありますか?私は何をしないのですか?前もって感謝します。

user10367961:

技術的な観点からは、あなたの問題を介して固定することができますAPIゲートウェイ

一言で言えば、あなたは新しいmicroservice、と言う定義する必要がありgateway service、あなたのAPIクライアントによって呼び出されます。gateway serviceその後、希望:

  1. 起動Service1取得するEntity1とともにidためEntity2
  2. 起動Service2取得するEntity2ステップ1からのIDに基づいて。
  3. 2つの応答(あなたの場合には、集約設定Entity2内の値をEntity1)。
  4. クライアントに集約された応答を返します。

あなたが設計しながら、心に留めておくために、2つの事:

  • あなたのAPIクライアントは、彼のデータは、2つのサービスに取り込まれる知っておくべきではありません。
  • それはあなたのmicroservices間のデカップリングのより高いレベルを可能にするので、それは、一般的にゲートウェイで集計クライアント応答にクリーナーです。たとえば、次のようにあなたのエンティティをモデル化する(との間でデータモデルの依存関係を削除することもできますService1し、Service2、2つのサービスが独立して進化することができます)。

スニペットは、以下を参照してください:

// In Service1
EntityA {
    Long bId; 
}

// In Service2
EntityB{

}

// In Gateway
Response {
    EntityA a;
    EntityB b;
}

天候の決定は、Entity1参照する必要がありEntity2、あなたのデータが配信される方法ではなく、あなたのビジネスニーズに依存しません。あなたがモノリシックアプリケーションを持っているでしょうし、そのコンテキストでそれがために理にかなっている場合はEntity1、参照にEntity2、それはまだmicroservice環境でそうする意味があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=182012&siteId=1