7

Spring Data Rest または HATEOAS に基づくハイパーメディア ベースのマイクロサービスを使用する場合に関係を処理する方法のパターンを見つけようとしています。

サービス A (インストラクター) とサービス B (コース) がある場合、それぞれがスタンドアロン アプリとして存在します。

2 つのサービス間の関係を確立するための推奨される方法は何ですか。外部サービスの ID の列を必要としない方法で。各サービスには、同じマナーで通信する必要がある他の多くのサービスが含まれる可能性があります。

考えられる解決策 (正しいパスがわからない)

各サービスには、サービス内のプライマリ エンティティを持つ OneToMany を持つ 2 番目のテーブルがあります。テーブルには次のフィールドがあります。

ID、entityID、rel、relatedID

次に、Spring Data Rest セットアップを使用する反対のサービスで、結合テーブルを照会して一致するレコードを検索する検索をセットアップします。

私が達成したい主な目標は、他のサービスの知識がなくても、任意のサービスが任意の数の他のサービスと関係を持つことができることです。

4

2 に答える 2

11

基本的な手順は次のとおりです。

  1. サービスは、他のサービスのリソースを検出する必要があります。
  2. 次に、サービスは、必要に応じてレンダリングするリソースへのリンクを追加します。

このリポジトリには、これらの手順の非常に初歩的な例があります。この例は、店舗の地理空間検索を提供するサービスという 2 つのサービスで構成されています。2 番目のサービスは、基本的な顧客管理であり、現在利用可能な場合は店舗サービスとオプションで統合します。

手順の実装方法は次のとおりです。

リソース発見

私の例では、消費サービス (つまり、顧客サービス) は、Spring HATEOAS のTraversonAPI を使用して、という名前のリンクが見つかるまで一連のリンク関係をトラバースしますby-location。これはStoreIntegrationで行われます。したがって、クライアント サービスが知る必要があるのは、ルート URI (私の場合は環境から取得) と一連のリンク関係だけです。-requestを使用して定期的にリンクの存在をチェックします。HEAD

もちろん、これはより洗練された方法で行うことができます。ベース URI をクライアント サービスに配線することは、最適ではないと考えられるかもしれませんが、とにかく DNS を使用している場合 (URI の背後にある実際のホストを交換できるようにするため) には、実際には非常にうまく機能します。ハードコード)。それにもかかわらず、これはまともな実用的なアプローチであり、URI を変更した場合でも他のサービスを再検出し、追加のライブラリは必要ありません。

さらに洗練されたアプローチについては、基本的にサービスレジストリであるNetflix の Eureka ライブラリをご覧ください。また、そのために用意されているSpring Cloud 統合をチェックアウトすることもできます。

リンクによるリソースの増強

Spring HATEOAS は、ResourceProcessorSpring Data REST が活用する API を提供します。Resourceレンダリングしようとしているインスタンスを操作したり、リンクを追加したりできます。顧客サービスの実装は、ここにあります。

基本的に、上記の手順で発見されたばかりのリンクを取得し、既知のパラメーターを使用してそれを拡張するため、クライアントはリンクをたどるだけで店舗の地理検索をトリガーできます。

それ以上

Spring Cloudのサンプル プロジェクトで、この例のより洗練されたバリアントを見つけることができます。まったく同じ例を使用しますが、Eureka 統合、メトリックの収集、UI の追加などの Spring Cloud コンポーネントに切り替えます。

于 2015-01-07T08:55:50.627 に答える