1.Zuul简介

Zuul包含了对请求的路由过滤两个最主要的功能。

路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。

过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。

Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

注:Zuul服务最终还是会注册进Eureka

Zuul提供代理、路由、过滤三大功能。

https://github.com/Netflix/zuul/wiki/Getting-Started

2.Zuul配置

(1).创建工程

新建Module模块microservicecloud-zuul-gateway-9527

(2).配置pom

[1].修改部分

<!-- zuul路由网关 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-zuul</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-eureka</artifactId>

</dependency>

[2].完整部分

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<parent>

<artifactId>microservicecloud</artifactId>

<groupId>com.hosystem</groupId>

<version>1.0-SNAPSHOT</version>

</parent>

<modelVersion>4.0.0</modelVersion>

<artifactId>microservicecloud-zuul-gateway-9527</artifactId>

<dependencies>

<!-- zuul路由网关 -->

        <dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-zuul</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-eureka</artifactId>

</dependency>

<!-- actuator监控 -->

        <dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

<!--  hystrix容错-->

        <dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-hystrix</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-config</artifactId>

</dependency>

<!-- 日常标配 -->

        <dependency>

<groupId>com.atguigu.springcloud</groupId>

<artifactId>microservicecloud-api</artifactId>

<version>${project.version}</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-jetty</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

</dependency>

<!-- 热部署插件 -->

        <dependency>

<groupId>org.springframework</groupId>

<artifactId>springloaded</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-devtools</artifactId>

</dependency>

</dependencies>

</project>

(3).applicaiton.yml

server:

  port: 9527

spring:

  application:

    name: microservicecloud-zuul-gateway

eureka:

  client:

    service-url:

      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka

instance:

    instance-id: gateway-9527.com

prefer-ip-address: true

 

 

info:

  app.name: hosystem-microcloud

company.name: www.hosystem.com

build.artifactId: $project.artifactId$

build.version: $project.version$

(4).修改hosts

127.0.0.1  myzuul.com

(5).主启动类

创建主启动类Zuul_9527_StartSpringCloudApp,并添加注解@EnableZuulProxy.

package com.hosystem.springcloud;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication

@EnableZuulProxy

public class Zuul_9527_StartSpringCloudApp

{

public static void main(String[] args)

{

SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args);

}

}

(6).启动项目

[1].启动eureka7001、eureka7002、eureka7003

启动microservicecloud-eureka-7001、microservicecloud-eureka-7002、microservicecloud-eureka-7003

[2].启动provider8001

启动microservicecloud-provider-dept-8001

[3].启动zuul9527

启动microservicecloud-zuul-gateway-9527

(7).测试

[1].未启用路由

http://localhost:8001/dept/get/2

[2].启动路由

http://myzuul.com:9527/microservicecloud-dept/dept/get/2

3.Zuul路由访问映射规则

(1).修改application.yml

修改部分:

zuul:

  routes:

    mydept.serviceId: microservicecloud-dept

mydept.path: /mydept/**

完整部分:

server:

  port: 9527

spring:

  application:

    name: microservicecloud-zuul-gateway

eureka:

  client:

    service-url:

      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka

instance:

    instance-id: gateway-9527.com

prefer-ip-address: true

zuul:

  routes:

    mydept.serviceId: microservicecloud-dept

mydept.path: /mydept/**

info:

  app.name: hosystem-microcloud

company.name: www.hosystem.com

build.artifactId: $project.artifactId$

build.version: $project.version$

访问效果

#之前访问的时候通过'microservicecloud-dept‘

http://myzuul.com:9527/microservicecloud-dept/dept/get/2

#之后访问的时候通过'mydept'

http://myzuul.com:9527/mydept/dept/get/1

出现的问题,通过'microservicecloud-dept‘或者'mydept'都可以访问。如何限制只允许'mydept'访问,而'microservicecloud-dept'访问失败呢?具体解决方法如下,

#解决单个的时候指定具体的servideId

#如果想要解决多个的时候可以使用   "*"

zuul:

  ignored-services: microservicecloud-dept

routes:

    mydept.serviceId: microservicecloud-dept

mydept.path: /mydept/**

统一公共前缀

zuul:

  prefix: /hosystem

ignored-services: "*"

  routes:

    mydept.serviceId: microservicecloud-dept

mydept.path: /mydept/**

完整的applicaiton.yml文件

server:

  port: 9527

spring:

  application:

    name: microservicecloud-zuul-gateway

eureka:

  client:

    service-url:

      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka

instance:

    instance-id: gateway-9527.com

prefer-ip-address: true

zuul:

  prefix: /hosystem

ignored-services: "*"

  routes:

    mydept.serviceId: microservicecloud-dept

mydept.path: /mydept/**

info:

  app.name: hosystem-microcloud

company.name: www.hosystem.com

build.artifactId: $project.artifactId$

build.version: $project.version$

参考文档:

https://github.com/Netflix/zuul/wiki/Getting-Started

8、Spring Cloud Zuul的更多相关文章

  1. Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。

    时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...

  2. 一:Spring Boot、Spring Cloud

    上次写了一篇文章叫Spring Cloud在国内中小型公司能用起来吗?介绍了Spring Cloud是否能在中小公司使用起来,这篇文章是它的姊妹篇.其实我们在这条路上已经走了一年多,从16年初到现在. ...

  3. 一、Spring Cloud介绍

    springcloud 介绍 研究了一段时间spring boot了准备向spirng cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Clou ...

  4. 笔记:Spring Cloud Zuul 快速入门

    Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...

  5. Spring Cloud Zuul 限流详解(附源码)(转)

    在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选择,只需要编写一个过滤器就可以了,关键在于如何实现限流的算法. ...

  6. spring cloud zuul参数调优

    zuul 内置参数 zuul.host.maxTotalConnections 适用于ApacheHttpClient,如果是okhttp无效.每个服务的http客户端连接池最大连接,默认是200. ...

  7. Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务

    API 网关的出现的原因是微服务架构的出现,不同的微服务一般会有不同的服务地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会 ...

  8. 几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列

    微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...

  9. Spring Cloud Zuul 快速入门

    Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...

随机推荐

  1. js常用函数和事件

    1.常规函数 javascript常规函数包括以下9个函数: (1)alert函数:显示一个警告对话框,包括一个OK按钮. (2)confirm函数:显示一个确认对话框,包括OK.Cancel按钮. ...

  2. 存储型跨站获取COOKIE漏洞复现

    一.漏洞描述 获取网站cookie 二.漏洞原理 1.服务器后台写入PHP代码 $cookie = $_GET['cookie']; if($cookie){ echo ($cookie); $log ...

  3. 使用Camtasia制作冰雪奇缘视频

    冰雪奇缘的精良制作,以及场景的华丽,让很多女孩子都很喜欢.对于其中美丽的冰雪场景,我们还可以使用Camtasia(Windows系统)教程录制软件来做冰雪奇缘视频. Camtasia教程录制软件是一款 ...

  4. 类虚拟机软件CrossOver是什么?它的优势在哪里?

    虚拟机软件对于很多人来说已经不是一个陌生的词汇了.我们可以通过软件来模拟具有完整硬件系统功能的计算机系统.比如我们可以在Mac OS系统上模拟Windows 7 的系统,以此来安装我们想要使用的应用程 ...

  5. python画猫并打包成EXE文件

    因python自带有海龟画图库,尝试给爱猫的小仙女来画个猫咪. 1.代码如下 from turtle import * #两个函数用于画心 def curvemove(): for i in rang ...

  6. 自学linux——12.shell进阶

    Shell进阶 当把在Windows中写好的脚本传到linux中使用时,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以会多出来\r,在linux中运行脚本时,需执行: sed - ...

  7. Java蓝桥杯——逻辑推理练习题

    逻辑推理题 谁是贼? 公安人员审问四名窃贼嫌疑犯.已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎.在回答公安人员的问题中: 甲说:"乙没有偷,是丁偷的.&quo ...

  8. VisualStudio 编写汇编代码相关设置

    VS编写汇编代码方法 新建空项目,不创建解决方案 项目右键,Build Customizations,选择masm 新建源文件,后缀为.ASM 编写代码 .386 ; Tells MASM to us ...

  9. 02-Python里字符串的常用操作方法--split()函数和join()函数

    1.split() --分割,返回一个列表, 会丢失分割字符 实例: my_str = 'you and me and he' list01 = my_str.split('and') list02 ...

  10. java41

    2019.8.7全部回顾完毕 收获:搞懂了以前不理解的内容 学会了Markdown语法 1. 将首字母变大写 public class _02将首字母变大写 { public static void ...