この記事では、Spring Cloud での zuul の原理と使用法について紹介します。一定の参考価値があります。必要な友人は参照してください。お役に立てれば幸いです。
はじめに
Zuul は、デバイスや Web サイトから Netflix ストリーミング アプリケーションのバックエンドへのすべてのリクエストのフロント ドアです。 Zuul は、エッジ サービス アプリケーションとして、動的ルーティング、監視、復元力、セキュリティをサポートするように構築されています。必要に応じて、リクエストを複数の Amazon Autoscaling グループにルーティングすることもできます。
Zuul は、一連の異なるタイプのフィルターを使用して、機能をエッジ サービスに迅速かつ柔軟に適用できるようにします。これらのフィルターは、次の機能の実行に役立ちます。
- 認証とセキュリティ - 各リソースの認証要件を特定し、それらの要件を満たさないリクエストを拒否します。
- インサイトとモニタリング – エッジで意味のあるデータと統計を追跡し、生産状況を正確に把握します。
- 動的ルーティング - 必要に応じてリクエストを別のバックエンド クラスターに動的にルーティングします。
- ストレス テスト - クラスターへのトラフィックを徐々に増やしてパフォーマンスを評価します。
- 負荷を軽減する - 各タイプのリクエストに容量を割り当て、制限を超えるリクエストを削除します。
- 静的応答処理 - 内部クラスターに転送するのではなく、エッジで直接応答を構築します。
- マルチリージョンの復元力 - リクエストを AWS リージョン間でルーティングして、ELB の使用を多様化し、メンバーに近い当社の強み
仕組み
概要を説明すると、Zuul 2.0 はプレフィルター (受信フィルター) を実行する Netty サーバーです。次に、Netty クライアントを使用してリクエストをプロキシし、ポスト フィルタ (アウトバウンド フィルタ) を実行した後に応答を返します。
#フィルターは、Zuul のビジネス ロジックの中核です。上の図に示すように、これらは非常に幅広い操作を実行でき、要求と応答のライフ サイクルのさまざまな部分で動作できます。
- 受信フィルターは、ソースにルーティングする前に実行され、認証、ルーティング、リクエストの装飾に使用できます。
- エンドポイント フィルターを使用して静的応答を返すことができます。それ以外の場合は、組み込みの ProxyEndpoint フィルターがリクエストをオリジンにルーティングします。
- 送信フィルターは、ソースから応答を取得した後に実行され、ユーザー応答の測定、装飾、またはカスタム ヘッダーの追加に使用できます。
フィルタには 同期と非同期 の 2 種類があります。イベント ループで実行しているため、フィルターを決してブロックしないでください。ブロックしたい場合は、非同期フィルターでブロックし、別のスレッドプールでブロックできます。それ以外の場合は、同期フィルターを使用します。
ユーティリティ フィルター
- DebugRequest - 追加のデバッグ ログをリクエストに追加するクエリ パラメーターを検索します。
- Healthcheck - 単純な静的すべてが正しくブートストラップされた場合に 200 を返すエンドポイント フィルター
- ZuulResponseFilter - ルーティング、リクエストの実行、ステータス、エラー理由に関する追加の詳細を提供する情報ヘッダーを追加します
- GZipResponseFilter - gzip アウトバウンド レスポンスを有効にすることができます
- SurgicalDebugFilter - 特定のリクエストをデバッグのために別のホストにルーティングできます
使用上のヒント
依存関係:
<dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-zuul</artifactid> </dependency>
MyFilter フィルター
@Component public class MyFilter extends ZuulFilter { private static Logger log = LoggerFactory.getLogger(MyFilter.class); /** * pre:路由之前 * routing:路由之时 * post: 路由之后 * error:发送错误调用 * @return */ @Override public String filterType() { return "pre"; } /** * 过滤的顺序 * @return */ @Override public int filterOrder() { return 0; } /** * 这里可以写逻辑判断,是否要过滤,本文true,永远过滤 * @return */ @Override public boolean shouldFilter() { return true; } /** * 过滤器的具体逻辑。 * 可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。 * @return * @throws ZuulException */ @Override public Object run() throws ZuulException { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString())); Object accessToken = request.getParameter("token"); if(accessToken == null) { log.warn("token is empty"); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); try { ctx.getResponse().getWriter().write("token is empty"); }catch (Exception e){} return null; } log.info("ok"); return null; } }
application.yml 設定ルーティング転送
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8769 spring: application: name: cloud-service-zuul zuul: routes: api-a: path: /api-a/** serviceId: cloud-service-ribbon api-b: path: /api-b/** serviceId: cloud-service-feign
zuul を有効にする
@SpringBootApplication @EnableZuulProxy @EnableEurekaClient @EnableDiscoveryClient public class CloudServiceZuulApplication { public static void main(String[] args) { SpringApplication.run(CloudServiceZuulApplication.class, args); } }
ルート メルトダウン
/** * 路由熔断 */ @Component public class ProducerFallback implements FallbackProvider { private final Logger logger = LoggerFactory.getLogger(FallbackProvider.class); //指定要处理的 service。 @Override public String getRoute() { return "spring-cloud-producer"; } @Override public ClientHttpResponse fallbackResponse(String route, Throwable cause) { if (cause != null && cause.getCause() != null) { String reason = cause.getCause().getMessage(); logger.info("Excption {}",reason); } return fallbackResponse(); } public ClientHttpResponse fallbackResponse() { return new ClientHttpResponse() { @Override public HttpStatus getStatusCode() throws IOException { return HttpStatus.OK; } @Override public int getRawStatusCode() throws IOException { return 200; } @Override public String getStatusText() throws IOException { return "OK"; } @Override public void close() { } @Override public InputStream getBody() throws IOException { return new ByteArrayInputStream("The service is unavailable.".getBytes()); } @Override public HttpHeaders getHeaders() { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); return headers; } }; } }
概要
Zuul ゲートウェイには自動転送メカニズムがありますが、実際には、Zuul には認証、トラフィック転送、リクエスト統計など、さらに多くのアプリケーション シナリオがあります。これらの機能はすべて Zuul を使用して実装できます。
以上がSpringCloud での zuul の原理と使用法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

この記事では、分散アプリケーションを構築するためのJavaのリモートメソッドの呼び出し(RMI)について説明します。 インターフェイスの定義、実装、レジストリのセットアップ、およびクライアント側の呼び出しを詳述し、ネットワークの問題やセキュリティなどの課題に対処します。

この記事では、ネットワーク通信のためのJavaのソケットAPI、クライアントサーバーのセットアップ、データ処理、リソース管理、エラー処理、セキュリティなどの重要な考慮事項をカバーしています。 また、パフォーマンスの最適化手法も調査します

この記事では、カスタムJavaネットワーキングプロトコルの作成を詳述しています。 プロトコルの定義(データ構造、フレーミング、エラー処理、バージョン化)、実装(ソケットを使用)、データシリアル化、およびベストプラクティス(効率、セキュリティ、メンテナ


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ドリームウィーバー CS6
ビジュアル Web 開発ツール

ホットトピック



