【SpringCloud】路由网关【Zuul】

我们在进行分布式开发的时候,会用到多个服务(微服务),那么我们在调用这些微服务的时候,都是用的每一个微服务所在主机的IP加端口号进行调用的,这样会导致路由很复杂也不安全。我们希望能够通过统一放入IP和端口号来调用不同的服务,因此就出现了路由网关。

一、什么是zuul

Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如 /api/user 转发到到 user 服务, /api/shop 转发到到 shop 服务。zuul 默认和 Ribbon 结合实现了负载均衡的功能。

本节我们主要讲解Zuul的路由转发,Zuul 的路由转发用到了 Eureka,在 SpringCloud 的项目中,每一个 springboot 服务都会注册到注册中心 Eureka 中,那么 Zuul 就可以在注册中心中拉去服务,并且通过 springboot 服务的注册名进行服务的访问,从而避免暴露 springboot 服务的 IP 以及 端口号。
在这里插入图片描述



二、通过zuul实现路由网关

第一步:我们需要创建一个 springboot 服务(springcloud-zuul-9527)

springcloud-zuul-9527 服务是用于路由网关的服务(我使用的 springboot 版本是 2.2.5RELEASE )。

第二步:导入pom依赖

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

    <!-- eureka依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <version>2.2.5.RELEASE</version>
    </dependency>
<!--      zuul 依赖  -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        <version>2.2.5.RELEASE</version>
    </dependency>

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

第三步:编写配置,目前先不自定义 zuul 配置(application.yaml)

server:
  port: 9527

spring:
  application:
    name: springcloud-zuul

eureka:
  client:
    service-url:
      defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7001.com:7001/eureka/  # EurekaServer端的url
  instance:
    instance-id: this service is zuul and port of 9527 # 修改 Eureka 的状态(Status)信息
    prefer-ip-address: true #显示真是的IP地址


# actuator 配置
info:
  app.info: this is a zuul server and port of 9527
  author.name: StudiousTiger
  author.email: studioustiger@163.com
  author.blog: https://blog.csdn.net/m0_45067620

第四步:开启 zuul 支持注解

在主启动类上添加 @EnableZuulProxy 注解,开启 zuul 代理服务。

@SpringBootApplication
@EnableZuulProxy //开启zuul代理
public class SpringcloudZuul9527Application {

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

第五步:开启springcloud-eureka-7001springcloud-provider-dept-hystrix-8001springcloud-zuul-9527
在这里插入图片描述

访问localhost:8001/dept/select/2,成功获取数据
在这里插入图片描述

因为我们配置了 zuul,所以我们可以通过 zuul 服务实现访问注册进 Eureka 的服务,格式:zuul的IP:端口号/注册进Eureka的服务名/具体放入url
访问localhost:9527/springcloud-provider-dept-hystrix/dept/select/2,成功获取数据,这样我们就可以不通过微服务的IP和端口号进行访问,从而可以进行统一管理和安全。
在这里插入图片描述

但是,这样还是不太好,因为我们还是暴露了服务在 Eureka 注册的应用名,为了隐藏服务在 Eureka 注册的应用名,我们可以进行如下的配置(application.yaml)。

ignored-services:禁止使用服务在 Eureka注册的应用名进行服务的访问,其类型是一个 set 或 array

prefix:设置访问路径前缀。

routes:设置路由映射,其类型是键值对(key-value)。zuul 还是要通过微服务在Eureka中注册的应用名进行服务的访问,所以需要对微服务在Eureka中注册的应用名做一个映射(别名)。

zuul:
  ignored-services: # ignored-services是set集合/arr数组
    - springcloud-provider-dept-hystrix # 不能使用这个路径访问
  prefix: /tiger # 设置访问前缀
  routes:  # 设置路由映射(别名)
    mydept.serviceId: springcloud-provider-dept-hystrix
    mydept.path: /blog/**

经过上述的配置,一方面我们进制使用 springcloud-provider-dept-hystrix 进行访问,另一方面也设置了前缀与路由映射。访问如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值