サービス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オブジェクトを持っている必要がありますか?私は何をしないのですか?前もって感謝します。
技術的な観点からは、あなたの問題を介して固定することができますAPIゲートウェイ。
一言で言えば、あなたは新しいmicroservice、と言う定義する必要がありgateway service
、あなたのAPIクライアントによって呼び出されます。gateway service
その後、希望:
- 起動
Service1
取得するEntity1
とともにid
ためEntity2
- 起動
Service2
取得するEntity2
ステップ1からのIDに基づいて。 - 2つの応答(あなたの場合には、集約設定
Entity2
内の値をEntity1
)。 - クライアントに集約された応答を返します。
あなたが設計しながら、心に留めておくために、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環境でそうする意味があります。