Spring Cloud 使用 zuul 作为服务网关

76 阅读5分钟

Spring Cloud 使用 zuul 作为服务网管

前言

zuul路由网关

Zuul是Spring Cloud全家桶中的微服务API网关。

所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。Zuul底层利用各种filter实现如下功能:

认证和安全 识别每个需要认证的资源,拒绝不符合要求的请求。
性能监测 在服务边界追踪并统计数据,提供精确的生产视图。
动态路由 根据需要将请求动态路由到后端集群。
压力测试 逐渐增加对集群的流量以了解其性能。
负载卸载 预先为每种类型的请求分配容量,当请求超过容量时自动丢弃。
静态资源处理 直接在边界返回某些响应。

在微服务架构中,通常会有多个服务提供者。设想一个电商系统,可能会有商品、订单、支付、用户等多个类型的服务,而每个类型的服务数量也会随着整个系统体量的增大也会随之增长和变更。作为UI端,在展示页面时可能需要从多个微服务中聚合数据,而且服务的划分位置结构可能会有所改变。网关就可以对外暴露聚合API,屏蔽内部微服务的微小变动,保持整个系统的稳定性。

当然这只是网关众多功能中的一部分,它还可以做负载均衡,统一鉴权,协议转换,监控监测等一系列功能。

zuul 简单入门

注册服务

这里已经启动一个微服务,zuul 跳转到的指定服务

我们这里已经注册号一个服务注册中心和一个服务
在这里插入图片描述

注册中心服务 端为 6868

微服务 端口为 6869

并且在6869微服务中注册对外提供了一个访问接口
在这里插入图片描述

打开服务注册中心可以看到 6869这个服务已经注册到注册中心

在这里插入图片描述

zuui服务

导入maven 依赖

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

main 启动类 开启服务器网关

// 开启服务器网关
@EnableZuulProxy
服务网管配置
server:
  port: 5000
spring:
  application:
    name: zuui-server



zuul:
  routes:
    #标识你服务的名字,这里可以自己定义,一般方便和规范来讲还是跟自己服务的名字一样
    user-server:
      #服务映射的路径,通过这路径就可以从外部访问你的服务了,目的是为了不爆露你机器的IP,面向服务的路由了,给你选一个可用的出来,
      #这里zuul是自动依赖hystrix,ribbon的,不是面向单机
      path: /a-service/**  # user-server 指定这个开头的服务
      url: http://127.0.0.1:6869/ # 真正的微服务地址 写死的url

然后我们来访问一下 6869这个服务

在这里插入图片描述

然后在通过服务网管访问这个服务

服务官网这个服务 ip + 端口 : + 服务路径(path 这个是你配置需要访问的那个路径,真正的地址路径是 url 配置 )

在这里插入图片描述

这个网关配置是写死的在配置文件里的,真正情况下我们是ip port 都是变化的,所以我们需要在服务注册中心中找需要访问的服务。

故此需要面向服务的路由方式。

面向服务路由

面向服务路由 仅仅只需在配置文件中指定需要访问的服务id

并且在将服务网关注册到服务注册中心


zuul:
  routes:
    #标识你服务的名字,这里可以自己定义,一般方便和规范来讲还是跟自己服务的名字一样
    user-server:
      #服务映射的路径,通过这路径就可以从外部访问你的服务了,目的是为了不爆露你机器的IP,面向服务的路由了,给你选一个可用的出来,
      #这里zuul是自动依赖hystrix,ribbon的,不是面向单机
      path: /a-service/**  # user-server 指定这个开头的服务
#      url: http://127.0.0.1:6869/ # 真正的微服务地址 写死的url
      service-id: user-server # 指定服务id 在注册中心服务的名字


#  将网管注册到服务注册中心
eureka:
  client:
    registerWithEureka: true  #是否将自己注册到Eureka服务中,本身就是服务,所以无需注册
    fetchRegistry: true # 是否从Eureka 中获取注册信息
    serviceUrl:  # Eureka 客户端与Eureka服务端进行交互的地主
      defaultZone: http://127.0.0.1:6868/eureka/

  instance:
    #将自己的ip注册到eureka服务中
    prefer-ip-address: true

酱紫也可以访问到6869服务,并且可以访问多个服务相同的服务,可以负载均衡不同的微服务,提高系统的稳定性,并发性。

在这里插入图片描述

网关的默认路由

如果是成千百个微服务,每一个都这样子配置也很麻烦,Spring Cloud为我们做好了默认的配置。
默认情况下,Zuul会自动代理所有已经注册到Eureka Server注册中心的微服务,并且Zuul访问的规则:

http://Zuul的ip地址:Zuul的port/微服务id/请求地址

如:http://localhost:5000/user-server/getUser?id=2

我们在浏览器中访问http://localhost:8080/spring-cloud-producer/hello?name=spring,可以看到和上面一样的返回结果,说明Spring cloud zuul默认已经提供了转发功能。

代码地址 传送门