Spring Cloud Zuul 简单使用

606 阅读2分钟

1. zuul 简介

我这简单理解为 微服务架构中,系统被拆分多个模块对外提供服务后,对外提供的服务有不同的ip,端口,对于前端同学来说,不可能每调用一个服务使用不同的ip和端口,这就太恐怖了,所以呢,就搞了个 网关,前端只需要知道少量的就可以了。Zuul就是做这个工作的。下面看下使用

2. zuul使用

  1. 创建工程 我这里创建了4个工程,分别是两个提供服务的 movie和cartoon(分别提供电影和动漫的服务),一个eureka注册中心工程,一个zuul工程。

  1. 注册中心 (linn-eureka)

    2.1 添加依赖

     <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    

    2.2 启动类上 添加注解

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

    2.3 .yml 配置类 注意 配置下 host

    spring:
      application:
        name: eureka-server
    
    # 端口号
    server:
      port: 7000
    
    eureka:
      instance:
        hostname: server
      client:
        # 是否拉取 注册的服务信息, 默认true;因为这是一个单点的EurekaServer,不需要同步其它EurekaServer节点的数据
        fetch-registry: false
        # 是否注册自身到eureka服务,默认true
        register-with-eureka: false
    
  2. 两个服务(linn-movie和linn-cartoon)

    3.1 添加依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    

    3.2 linn-movie 中添加一个服务

    @RestController
    public class MovieController {
    
        @RequestMapping("movieChannel")
        public String movieChannel() {
            return "movieChannel";
        }
    
    }
    

    3.3 linn-cartoon 中添加一个服务

    @RestController
    public class CartoonController {
    
        @RequestMapping("cartoonChannel")
        public String cartoonChannel() {
            return "cartoonChannel";
        }
    }
    

    3.4 linn-movie和linn-cartoon 都注册到 eureka

    • linn-movie 配置 ,对应的 .yml中添加
    server:
      port: 9010
    spring:
      application:
        name: movie
    eureka:
      client:
        serviceUrl:
          defaultZone: http://server:7000/eureka/
    
    • linn-cartoon 配置 ,对应的 .yml中添加
    server:
      port: 9020
    spring:
      application:
        name: cartoon
    eureka:
      client:
        serviceUrl:
          defaultZone: http://server:7000/eureka/
    
  3. zuul配置

    4.1 添加依赖

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

    4.2 启动类 添加注解@EnableZuulProxy

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

    4.3 .yml中配置 routers,并且注册到 eureka

    server:
      port: 10010
    spring:
      application:
        name: zuul
    eureka:
      client:
        serviceUrl:
          defaultZone: http://server:7000/eureka/
    
        zuul:
          routes:
            movie:
              path: /movie/** # 访问这个路径的 都路由到serviceId 指定的 服务上
              serviceId: movie
            cartoon:
              path: /cartoon/** # 访问这个路径的 都路由到serviceId 指定的 服务上
              serviceId: cartoon
    
  4. 访问测试

    5.1 启动这个 4个工程,访问localhost:7000

    可以看到 三个服务注册上去了

    5.2 分别访问 zuul

    http://localhost:10010/cartoon/cartoonChannel http://localhost:10010/movie/movieChannel

    可以看到 路由过去了