一、引言

  写这篇之前,也先介绍一下应用背景吧,大家应该或多或少接触过nginx做反向代理吧?Zuul网关其实也是帮我做了这么一层工作,假设我们的项目有几十个微服务,每个微服务你都记录地址的话,难受不?所以我们需要一个统一的入口,也就是网关来给我们做请求分发,那么对外调用我统一经过网关,还可以做一些身份校验,黑白名单过滤等工作,是不是很方便呀~

二、Zuul网关实例

  开搞开搞,同样也是需要先新建一个Spring Boot工程,然后开始做下面的配置:

pom.xml

Spring Cloud(三)Zuul网关_xml

Spring Cloud(三)Zuul网关_ci_02

1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <groupId>com.zhbf</groupId>
 6     <artifactId>zuul</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <name>zuul</name>
 9     <description>网关服务【有梦想的肥宅】</description>
10 
11     <parent>
12         <groupId>org.springframework.boot</groupId>
13         <artifactId>spring-boot-starter-parent</artifactId>
14         <version>1.5.6.RELEASE</version>
15         <relativePath/>
16     </parent>
17 
18     <properties>
19         <java.version>1.8</java.version>
20         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
22         <spring-boot.version>1.5.6.RELEASE</spring-boot.version><!--Spring Boot版本-->
23         <spring-cloud.version>1.4.6.RELEASE</spring-cloud.version><!--Spring Cloud版本-->
24     </properties>
25 
26     <dependencyManagement>
27         <dependencies>
28             <!--指定下载源和使用Spring Boot的版本-->
29             <dependency>
30                 <groupId>org.springframework.boot</groupId>
31                 <artifactId>spring-boot-dependencies</artifactId>
32                 <version>${spring-boot.version}</version>
33                 <type>pom</type>
34                 <scope>import</scope>
35             </dependency>
36             <!--指定下载源和使用Spring Cloud的版本-->
37             <dependency>
38                 <groupId>org.springframework.cloud</groupId>
39                 <artifactId>spring-cloud-dependencies</artifactId>
40                 <version>Edgware.SR5</version>
41                 <type>pom</type>
42                 <scope>import</scope>
43             </dependency>
44         </dependencies>
45     </dependencyManagement>
46 
47 
48     <dependencies>
49         <!--引入Spring Boot依赖-->
50         <dependency>
51             <groupId>org.springframework.boot</groupId>
52             <artifactId>spring-boot-starter</artifactId>
53         </dependency>
54         <!--引入Spring Cloud的Eureka依赖-->
55         <dependency>
56             <groupId>org.springframework.cloud</groupId>
57             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
58             <version>${spring-cloud.version}</version>
59         </dependency>
60         <!--引入zuul网关依赖-->
61         <dependency>
62             <groupId>org.springframework.cloud</groupId>
63             <artifactId>spring-cloud-starter-zuul</artifactId>
64         </dependency>
65     </dependencies>
66 
67 </project>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.

View Code

application.yml

#应用名称
spring:
    application:
        name: ZUUL

#服务端口
server:
  port: 9093

#注册进eureka
eureka:
    client:
        service-url:
            defaultZone: http://${eureka.instance.hostname}:9090/eureka
        register-with-eureka: true
        fetch-registry: true
    instance:
        hostname: 127.0.0.1


#配置网关转发规则
zuul:
  routes:
    api-order: #表示当请求127.0.0.1:9093/order/开头的请求时,会通过eureka去找到OREDER-SERVER对应的实例做请求分发
      path: /order/**
      service-id: OREDER-SERVER
    api-gds:
      path: /gds/**
      service-id: GDS-SERVER
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

ZuulApplication.java【启动类】

@SpringBootApplication
@EnableZuulProxy //开启zuul网关
@EnableDiscoveryClient //服务注册发现
public class ZuulApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }

}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

启动工程并测试

Spring Cloud(三)Zuul网关_ci_03