Spring Boot - Định tuyến và máy chủ proxy Zuul

Zuul Server là một ứng dụng cổng xử lý tất cả các yêu cầu và thực hiện định tuyến động của các ứng dụng microservice. Máy chủ Zuul còn được gọi là Máy chủ Edge.

Ví dụ, /api/user được ánh xạ tới dịch vụ người dùng và / api / products được ánh xạ tới dịch vụ sản phẩm và Zuul Server tự động định tuyến các yêu cầu tới ứng dụng phụ trợ tương ứng.

Trong chương này, chúng ta sẽ xem chi tiết cách tạo ứng dụng Zuul Server trong Spring Boot.

Tạo ứng dụng máy chủ Zuul

Máy chủ Zuul đi kèm với sự phụ thuộc vào Spring Cloud. Bạn có thể tải xuống dự án Spring Boot từ trang Spring Initializerhttps://start.spring.io/ và chọn phần phụ thuộc Máy chủ Zuul.

Thêm chú thích @EnableZuulProxy trên ứng dụng Spring Boot chính của bạn. Chú thích @EnableZuulProxy được sử dụng để làm cho ứng dụng Spring Boot của bạn hoạt động như một máy chủ Zuul Proxy.

package com.tutorialspoint.zuulserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableZuulProxy
public class ZuulserverApplication {
   public static void main(String[] args) {
      SpringApplication.run(ZuulserverApplication.class, args);
   }
}

Bạn sẽ phải thêm phần phụ thuộc Spring Cloud Starter Zuul vào tệp cấu hình bản dựng của chúng tôi.

Người dùng Maven sẽ phải thêm phần phụ thuộc sau vào pom.xml tập tin -

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>

Đối với người dùng Gradle, hãy thêm phần phụ thuộc bên dưới vào tệp build.gradle của bạn

compile('org.springframework.cloud:spring-cloud-starter-zuul')

Đối với định tuyến Zuul, hãy thêm các thuộc tính dưới đây vào tệp application.properties hoặc tệp application.yml của bạn.

spring.application.name = zuulserver
zuul.routes.products.path = /api/demo/**
zuul.routes.products.url = http://localhost:8080/
server.port = 8111

Điều này có nghĩa là http gọi đến /api/demo/được chuyển tiếp đến dịch vụ sản phẩm. Ví dụ,/api/demo/products được chuyển tiếp đến /products.

người dùng tệp yaml có thể sử dụng tệp application.yml được hiển thị bên dưới -

server:
   port: 8111
spring:
   application:  
      name: zuulserver
zuul:

routes:
   products:
      path: /api/demo/**
      url: http://localhost:8080/

Note - Sự http://localhost:8080/ ứng dụng phải đang chạy trước khi định tuyến qua Zuul Proxy.

Tệp cấu hình bản dựng hoàn chỉnh được cung cấp bên dưới.

Người dùng Maven có thể sử dụng tệp pom.xml được cung cấp bên dưới:

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.tutorialspoint</groupId>
   <artifactId>zuulserver</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>zuulserver</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.9.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-zuul</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
</project>

Người dùng Gradle có thể sử dụng tệp build.gradle được cung cấp bên dưới:

buildscript {
   ext {
      springBootVersion = '1.5.9.RELEASE'
   }
   repositories {
      mavenCentral()
   }
   dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
   }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.tutorialspoint'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
   mavenCentral()
}
ext {
   springCloudVersion = 'Edgware.RELEASE'
}
dependencies {
   compile('org.springframework.cloud:spring-cloud-starter-zuul')
   testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
   imports {
      mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
   }
}

Bạn có thể tạo tệp JAR thực thi và chạy ứng dụng Spring Boot bằng cách sử dụng lệnh Maven hoặc Gradle được cung cấp bên dưới:

Đối với Maven, bạn có thể sử dụng lệnh dưới đây:

mvn clean install

Sau khi “XÂY DỰNG THÀNH CÔNG”, bạn có thể tìm thấy tệp JAR trong thư mục đích.

Đối với Gradle, bạn có thể sử dụng lệnh dưới đây:

gradle clean build

Sau khi “XÂY DỰNG THÀNH CÔNG”, bạn có thể tìm thấy tệp JAR trong thư mục build / libs.

Bây giờ, hãy chạy tệp JAR bằng cách sử dụng lệnh hiển thị bên dưới:

java –jar <JARFILE>

Bạn có thể tìm thấy ứng dụng đã khởi động trên cổng Tomcat 8111 như được hiển thị ở đây.

Bây giờ, hãy nhấn vào URL http://localhost:8111/api/demo/products trong trình duyệt web của bạn và bạn có thể thấy đầu ra của /products REST Endpoint như hình dưới đây -