疯狂创客圈 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 微服务脚手架 图文教程和演示视频,陆续上线:

组件 链接地址
Eureka Eureka 入门,带视频
SpringCloud Config springcloud Config 入门,带视频
spring security spring security 原理+实战
Spring Session SpringSession 独立使用
分布式 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) 视频示意(具体视频,请参见 博客园总入口

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


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

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


疯狂创客圈 Java 死磕系列

  • Java (Netty) 聊天程序【 亿级流量】实战 开源项目实战

Zuul 详解,带视频的更多相关文章

  1. Python开发技术详解(视频+源码+文档)

    Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...

  2. zuul 详解

    zuul的简单使用与分析: https://www.jb51.net/article/106716.htm https://www.jianshu.com/p/ff863d532767 zuul自定义 ...

  3. Apache的配置详解 带图

    对Apache 的 Http.conf 各项配置详解 1.01 ServerRoot 配置 [ServerRoot "" 主要用于指定 Apache 的安装路径,此选项参数值在安装 ...

  4. [转] 关于Struts-JSON配置(详解带实例struts2的json数据支持)

    关于Struts-JSON的提高开发效率 一.JSON是什么? :JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解 析和 ...

  5. linux初级学习笔记八:linux权限管理及权限管理命令详解!(视频序号:04_2)

    本节学习的命令:chown,chgrp,chmod,openssl,umask 本节学习的技能: 文件权限详解及对其的操作 生成随机密码命令 用遮罩码对用户权限进行修改 站在用户登陆的角度来说SHEL ...

  6. linux初级学习笔记六:linux用户及权限详解!(视频序号:03_4)

    本节学习的命令:/etc/passwd,/etc/shadow,/etc/group文件详解 本节学习的技能: 安全上下文 文件与目录的权限管理 影子命令 用户,用户组类别详解 /etc/passwd ...

  7. 详解H264视频格式-2016.01.28

    专业名词解释 VCL(Video Coding Layer)视频编码层 NAL(Network Abstraction Layer)网络提取层 SPS(Sequence Parameter Set) ...

  8. Android 中使用MediaRecorder进行录像详解(视频录制)

    在这里给出自己的一个测试DEMO,里面注释很详细.简单的视频录制功能. package com.video; import java.io.IOException; import android.ap ...

  9. C#调用存储过程详解(带返回值、参数输入输出等)

    CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGI ...

随机推荐

  1. 【Android - 自定义View】之自定义颜色渐变的Tab导航栏

    首先来介绍一下这个自定义View: (1)这个自定义View的名称叫做 GradientTab ,继承自View类: (2)这个自定义View实现了颜色渐变的Tab导航栏(仿微信主菜单),用户在左右滑 ...

  2. Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

    6月12日任务 12.17 Nginx负载均衡12.18 ssl原理12.19 生成ssl密钥对12.20 Nginx配置ssl扩展 针对请求的uri来代理 http://ask.apelearn.c ...

  3. 微信小程序——事件冒泡

    在微信小程序的事件分为冒泡事件和非冒泡事件: 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递. 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递. WXML的冒泡事件列表: ...

  4. 带着canvas去流浪系列之九 粒子动画

    [摘要] canvas实现粒子动画 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 粒子特效 粒子特效一般指密集点阵效果,它并不是canvas独有 ...

  5. 17.Django学习之django自带的contentType表

    通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/aaronthon/article/details/81714496 ...

  6. CF 1131A,1131B,1131C,1131D,1131F(Round541 A,B,C,D,F)题解

    A. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  7. 各大中间件底层技术-分布式一致性协议 Raft 详解

    前言 正式介绍 Raft 协议之前,我们先来举个职场产研团队的一个例子

  8. Asp.Net WebApi一个简单的Token验证

    1.前言: WebAPI主要开放数据给手机APP,Pad,其他需要得知数据的系统,或者软件应用.Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能.我上次写的<Asp.Net MV ...

  9. 7个点说清楚spring cloud微服务架构

    前言 spring cloud作为当下主流的微服务框架,让我们实现微服务架构简单快捷,spring cloud中各个组件在微服务架构中扮演的角色如下图所示,黑线表示注释说明,蓝线由A指向B,表示B从A ...

  10. 2019年12月18日Linux开发手记

    安装idle3: 1.端输入apt install idle3 以安装 2.安装完成后在终端输入idle以启动 配置pip: 1.终端输入apt install python3-pip 使用pip配置 ...