Zuul 详解,带视频


《SpringCloud Nginx 高并发核心编程》 环境搭建 图文教程和演示视频:面试

组件 连接地址
【必须】 虚拟机Linux 开发环境准备 windows vmware 扩展硬盘 + 共享文件
Linux openresty 安装 Linux openresty 安装
【必须】Linux Redis 安装(带视频) Linux Redis 安装(带视频)
【必须】Linux Zookeeper 安装(带视频) Linux Zookeeper 安装, 带视频
Windows Redis 安装(带视频) Windows Redis 安装(带视频)
RabbitMQ 离线安装(带视频) RabbitMQ 离线安装(带视频)
ElasticSearch 安装, 带视频 ElasticSearch 安装, 带视频
Nacos 安装(带视频) Nacos 安装(带视频)
【必须】Eureka Eureka 入门,带视频
【必须】springcloud Config 入门,带视频 springcloud Config 入门,带视频
【必须】Zuul 详解,带视频 Zuul 详解,带视频
【必须】SpringCloud 脚手架打包与启动 SpringCloud脚手架打包与启动

Zuul 微服务统一网关的功能

Zuul的角色是网关,也就是整个分布式微服务集群的流量入口。Zuul负责接收全部的Rest请求,如网页端、APP端等。
Zuul的功能有:
(1)路由:而且将不一样的 Rest 请求,转发至不一样的微服务提供者(Provider),其做用相似于 Nginx。 同时,也起到了统一端口的做用,将不少的微服务提供者(Provider)的不一样的端口,统一到了 Zuul 的服务端口。
(2)认证:网关直接暴露在公网上时,终端要调用某个服务,一般会把登陆后的token传过来,网关层对token令牌进行有效性验证,若是token令牌无效(或没令牌),则不容许访问Rest 服务。能够结合 Spring Security中的认证机制,完成 Zuul 网关的安全认证。。
(3)限流:高并发场景下,瞬时流量不可预估,为了保证服务对外的稳定性,限流成为每一个应用必备的一道安全防火墙,若是没有这道安全防火墙,请求的流量超过服务的负载能力,很容易形成整个服务的瘫痪。Zuul 使用 ZuulFilter 过滤器集成 RateLimiter 限流组件,能够基于Redis实现了分布式限流的功能。spring

在这里插入图片描述

开启Zuul网关服务

Zuul 作为网关层,自身也是一个微服务,跟其它服务提供者同样,都注册在Eureka Server上,能够相互发现,Zuul能感知到哪些服务提供在线,同时经过配置路由规则,能够将Rest请求自动转发到指定的后端微服务上。
新建 Zuul 网关服务项目的时候,须要在启动类中添加注解@EnableZuulProxy ,声明这是一个网关服务提供者。固然也须要在pom.xml文件中手动添加上以下依赖。编程

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

启动类的代码以下:windows

package com.crazymaker.springcloud.cloud.center.zuul;
//...

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@SpringBootApplication(scanBasePackages =
        {"com.crazymaker.springcloud.cloud.center.zuul",
                "com.crazymaker.springcloud.standard",
                "com.crazymaker.springcloud.user.info.contract"
        })
@EnableScheduling
@EnableHystrix
@EnableDiscoveryClient
//开启网关服务
@EnableZuulProxy
@EnableCircuitBreaker
public class ZuulServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulServerApplication.class, args);
    }
}

配置Zuul网关路由规则

如下是 Crazy-SpringCloud 微服务脚手架中的 Zuul 网关的路由规则配置:后端

#服务网关配置
zuul:
  ribbonIsolationStrategy: THREAD
  host:
    connect-timeout-millis: 600000
    socket-timeout-millis: 600000
  #路由规则
  routes:
    seckill-provider:
      path: /seckill-provider/**
      serviceId: seckill-provider
    message-provider:
      path: /message-provider/**
      serviceId: message-provider
    user-provider:
      path: /user-provider/**
      serviceId: user-provider
    urlDemo:
      path: /demo-provider/**
      url: http://127.0.0.1/demo-provider

以上示例中,使用了两种路由的方式:(1) 路由到直接URL;(2) 路由到微服务提供者。
先看第一种方式:路由到直接URL
好比在上述代码中,有一条叫作 urlDemo 的路由规则,该规则将匹配 /demo-provider/** 的全部URL请求,直接路由到 http://127.0.0.1/demo-provider/** 的直接地址。
再看第二种方式:路由到微服务提供者
好比在上述代码中,有一条叫作 user-provider 的路由规则,该规则将匹配 /user-provider /** 的全部URL请求,直接路由到名字叫作 user-provider 的某个微服务提供者。
两种方式的区别
(1)第二种方式,使用 serviceId 来指定服务提供者的名称;而第一种方式,使用url 来指定直接的目的 url 前缀。
(2)第二种方式,须要结合 Eureka Client 来实现动态的路由转发功能。启动类须要加上注解 @EnableDiscoveryClient。其实能够不加,由于 @EnableZuulProxy 已经自带了。另外,配置文件中增长 Eureka Client 客户端的相关配置,大体以下:安全

eureka:
  client:
    serviceUrl:
      defaultZone: http://${EUREKA_ZONE_HOST:localhost}:7777/eureka/
  instance:
    prefer-ip-address: true  #访问路径能够显示IP地址
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
    ip-address: ${spring.cloud.client.ip-address}

部署和视频

首先须要本地测试经过。服务器

(1)打包:

maven 打包工具。

(2)部署:

部署到linux服务器,解压缩,而后 start.sh 脚本启动。

(3) 访问

http://192.168.233.128:7799/

(4) 视频示意(具体视频,请参见 博客园总入口

img

具体,请关注 Java 高并发研习社群博客园 总入口


最后,介绍一下疯狂创客圈:疯狂创客圈,一个Java 高并发研习社群博客园 总入口

疯狂创客圈,倾力推出:面试必备 + 面试必备 + 面试必备 的基础原理+实战 书籍 《Netty Zookeeper Redis 高并发实战

img


疯狂创客圈 Java 死磕系列

  • Java (Netty) 聊天程序【 亿级流量】实战 开源项目实战
相关文章
相关标签/搜索