Zuul包含了对请求的路由和过滤两个最主要的功能:

  其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,类似于保安的职能,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础,Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获取其他的微服务消息,也即以后访问微服务是通过Zuul跳转后获得,最终Zuul服务还是会注册进Eureka。提供 服务代理 ,路由,过滤三大功能。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 spring-cloud-zuul服务网关 随笔

  从以上这张架构图中,我们可以看到所有的请求都必须通过API GateWay服务才能到达后面的服务,这就是Zuul所需要承担起来的责任。可见他的存在是很重要的

1.新建 boot 工程 修改pom文件

<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>Finchley.SR3</spring-cloud.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- SpringCloud 所有子项目 版本集中管理. 统一所有SpringCloud依赖项目的版本依赖-->
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-zuul -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin><!-- SpringBoot 项目打jar包的Maven插件 -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2.修改application.yml

server:
  port: 9527

spring:
  application:
    name: cloud-zuul-getway #服务注册到Eureka上使用的名称

eureka:
  client:
    service-url:  # 集群情况下如下,如果是单机版,只需要配置单机版Eureka地址
      defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/
  instance:
    instance-id: cloud-zuul-getway-9527
    prefer-ip-address: true #访问路径显示IP地址

info:   # 在Eureka上点击服务时会跳转到个404页面,可配置这里让他跳转到服务简介的一个页面,信息如下配置
  app.name: wuzz
  company.name: www.wuzz.com
  build.artifactId: cloud-zuul-getway
  build.version: 1.0

zuul:  # zuul 的配置规则 http://localhost:9527/wuzz/mydept/hello
  prefix: /wuzz # 统一的公共前缀
  ignored-services: cloud-provider  #  "*" 所有 忽略原有服务名
  routes:
    mydept.serviceId: cloud-provider #域名映射
    mydept.path: /mydept/**

3.修改主启动类

@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class ZuulApp {
    private final static Logger log = LoggerFactory.getLogger(ZuulApp.class);

    public static void main(String[] args) {
        SpringApplication.run(ZuulApp.class,args);
        log.info("服务启动成功");
    }
}

  启动Eureka集群,再启动 一个微服务服务提供者,再启动本开启了Zuul服务的微服务。可以通过 http://localhost:8001/dept/get/1 来访问服务提供者的服务 ,由于配置了Zuul,我们还可以通过 http://localhost:9527/wuzz/mydept/hello 这个地址去访问

  红色:对应的zuul服务的网关。

  蓝色:对应的zuul在Eureka集群上寻找到的已经注册在Eureka上的服务的服务名,这里配置忽略了原来的服务名并且加了自定义前缀。

  黑色:对应的Restful请求地址。

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄