あなたmicroservices間の要求を転送するZuul(microservicesはユーレカを通じて取り組む知っている)を使用しましたか?その場合は、サーバー側の負荷分散パターンを使用しています。
ディスカバリーサービス(あなたのケースではユーレカ)を使用している場合、すべてのインターサービスリクエスト(システム内)に対してクライアントサイドのロードバランシングパターンを使用するのが最善の方法だと思います。 (リボンまたはRestTemplateを使用することができます)。
Zuulはシステムの統一されたフロントドアとして使用できます。これにより、ブラウザ、モバイルアプリケーション、またはその他のユーザーインターフェイスは、相互原産のリソース共有(CORS)とそれぞれの認証を管理せずに複数のホストからサービスを利用できます。
たとえば、すべての画像コメントのクライアント(モバイルアプリ)リクエスト。クライアントはコメントサービスアドレスを知る必要はありません。プロキシアドレスのみが必要で、Zuulは要求を適切なサービスに転送します。あなたは、要求がGET www.myproxy.mycompany.com/comments
なります
zuul.routes.comments.path=/comments/**
zuul.routes.comments.service-id=comments
によってapplication.yml/.properties
でこれを行うことができます。あなたのサービス名を忘れないでくださいapplication.yml/.properties
非常に重要です(spring.application.name
)。 ZuulルートのサービスIDです(ユーレカの同じ識別子)。
あなたのシステムは外部サービスを要求する必要があります(3番目のメモに記載されています)。この場合、外部サービスは検出クライアントではなく、ZuulはユーレカからサービスIDを探すことができません。あなたは、あなたのサービスからのすべての要求/currencies/**
Zuulが行われます THROUGH 、このルートで
zuul.routes.currencyprovider.path=/currencies/**
zuul.routes.currencyprovider.url=https://currencies.net/
としてルートを使用します。 このアプローチでは、すべてのシステムに1つの扉があります。これはAPI Gateway patternです。
システムによっては、さまざまなサービスの複数の結果を集約して、クライアントの要求に応答する必要があることがあります。あなたはProxy(あなたの場合はZuul)でこれを行うことができます。
こんにちは、redoff、応答ありがとうございます。それは私が必要以上に多くの情報を持っています:)。私は別の質問があります。ディスカバリサービス(クライアント側のロードバランシング)を使用している場合、パス名を明示的に設定してサービス名に基づいてリクエストをルーティングできるという利点はありますか? – Harish
検出サービスを使用する場合、暗黙的にクライアント側のロードバランシングは使用されません。これは、サーバー側であるかクライアント側のLBであるかを定義するサービス間の通信アプローチです。 設定されたパスを使用する利点は、指定されたサービス(経路が設定されているもの)のみのアクセスを制限することができます**場合のみ、 'zuul.ignored-services = *'を追加します。 – redoff
例:3つのサービス(コメント、ユーザー、メトリック)があります。 **プロキシ経由で1つのサービス(例:コメントサービス)へのアクセスを制限します。あなたは 'zuul.ignored-services = *'と 'zuul.routes.comments.path =/comments/**' '' zuul.routes.comments.service-id = comments'のように処理します。 このプロパティ行では、すべてのリクエスト**スルー**プロキシは 'www.myproxy.mycompany.com/comments'以外で拒否されます – redoff