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. 学好Flex布局并不容易

    1. Flex布局介绍 CSS的传统布局解决方案,基于盒状模型,依赖display属性.position属性.float属性,对于一些特殊的布局,例如垂直居中,往往要想很多hack的方法来解决. 20 ...

  2. 深度分析:SpringBoot异常捕获与封装处理,看完你学会了吗?

    SpringBoot异常处理 简介 ​ 日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一般都是利用try ,catch的方式处理异常或者throw,throws的方式抛出异常不管.这种 ...

  3. Python判断是否为数字

    前言 Python isdigit()方法检测字符串是否只由数字组成. isdigit()方法语法: str.isdigit() 如果字符串只包含数字则返回 True 否则返回 False. 示例 x ...

  4. 【CF620E】New Year Tree

    (题面来自luogu) 题意翻译 你有一棵以1为根的有根树,有n个点,每个节点初始有一个颜色c[i]. 有两种操作: 1 v c 将以v为根的子树中所有点颜色更改为c 2 v 查询以v为根的子树中的节 ...

  5. Forethought Future Cup - Final Round (Onsite Finalists Only) C. Thanos Nim 题解(博弈+思维)

    题目链接 题目大意 给你n堆石子(n为偶数),两个人玩游戏,每次选取n/2堆不为0的石子,然后从这n/2堆石子中丢掉一些石子(每一堆丢弃的石子数量可以不一样,但不能为0),若这次操作中没有n/2堆不为 ...

  6. Ajax Status(状态码) & readyState()

    Ajax Status & readyState readyState(状态值) 是指运行AJAX所经历过的几种状态,论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤,使用" ...

  7. CentOS下搭建测试WEB平台

    LAMP MYSQL 下载免编译的软件包 cd /usr/local/src wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.73-lin ...

  8. The First Assignment

    我的第一条随笔 ========== 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-2 这个作业要求在哪里 https://edu.cn ...

  9. 软件安全----警惕缓冲区溢出(C中那些不安全的库函数)

    原文链接:https://blog.csdn.net/yang_yulei/article/details/45314177 链接:http://www.360doc.com/content/11/0 ...

  10. 一万字详解 Redis Cluster Gossip 协议

    Redis Cluster Gossip 协议 大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示. 集群模式和 Gossip 简介 ...