zuul 详解,带视频

疯狂创客圈 Java 高并发【 亿级流量聊天室实战】实战系列 【博客园总入口

架构师成长+面试必备之 高并发基础书籍 【Netty Zookeeper Redis 高并发实战


前言

Crazy-SpringCloud 微服务脚手架 &视频介绍

Crazy-SpringCloud 微服务脚手架,是为 Java 微服务开发 入门者 准备的 学习和开发脚手架。并配有一系列的使用教程和视频,大致如下:

高并发 环境搭建 图文教程和演示视频,陆续上线:

中间件链接地址
Linux Redis 安装(带视频)Linux Redis 安装(带视频)
Linux Zookeeper 安装(带视频)Linux Zookeeper 安装, 带视频
Windows Redis 安装(带视频)Windows Redis 安装(带视频)
RabbitMQ 离线安装(带视频)RabbitMQ 离线安装(带视频)
ElasticSearch 安装, 带视频ElasticSearch 安装, 带视频
Nacos 安装(带视频)Nacos 安装(带视频)

Crazy-SpringCloud 微服务脚手架 图文教程和演示视频,陆续上线:

组件链接地址
EurekaEureka 入门,带视频
SpringCloud Configspringcloud Config 入门,带视频
spring securityspring security 原理+实战
Spring SessionSpringSession 独立使用
分布式 session 基础RedisSession (自定义)
重点: springcloud 开发脚手架springcloud 开发脚手架
SpingSecurity + SpringSession 死磕 (写作中)SpingSecurity + SpringSession 死磕

小视频以及所需工具的百度网盘链接,请参见 疯狂创客圈 高并发社群 博客

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实现了分布式限流的功能。

在这里插入图片描述

开启Zuul网关服务

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

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

启动类的代码如下:

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) 聊天程序【 亿级流量】实战 开源项目实战
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值