1、概述

    1.1  微服务架构出现的问题   及  解决

          1.1.1  前言

                 每个微服务应用都提供对外的Restful API服务,它通过F5、Nginx等网络设备或工具软件实现对各个微服务的路由与负载均衡,并公开给外部客户端使用;

          1.1.2  出现的问题

                 运维人员角度

                 开发人员角度

                    为了保证对外服务的安全性,在服务端实现都会加入一定的权限校验,同时为了安全,还会有签名校验等;

                    这样导致每个微服务应用都需要有冗余的代码,后期维护量非常大;

          1.1.3  解决

                  为了解决这些常见的架构问题,API网关应运而生;

                  API网关

                      更为智能的应用服务器;

                      类似于面向对象设计模式中的Facade模式,就像是  整个微服务架构系统  的门面一样,所有的外部客户端访问都需要经过API网关进行调度、过滤

                      要实现请求路由、负载均衡、校验过滤、与服务治理框架的结合、请求转发时的熔断机制、服务的聚合等;

                  Spring Cloud提供了Spring Cloud Zuul来解决;

      1.2  Spring Cloud Zuul

            基于Netflix Zuul实现的API网关组件;

            Spring Cloud Zuul如何解决这2个普遍的问题?

                1.1.1  路由规则  与  服务实例   的问题

                        服务实例:Spring Cloud Zuul通过与Spring Cloud Eureka进行整合,将自身注册为Eureka服务治理下的应用,同时从Eureka中获得所有其他微服务的实例信息;这样的设计巧妙地将服务治理体系中维护的实例信息利用起来,使得将维护实例的工作交给服务治理框架自动完成,不需要人工介入;

                        路由规则:Zuul默认将通过以服务名作为ContextPath的方式来创建路由映射,大部分情况下,这样的默认设置已可以实现我们大部分的路由需求,除了一些特殊情况还需要作特别的配置;

                1.1.2  签名校验、登录校验在微服务中冗余问题

                        理论上说,这些校验逻辑在本质上与微服务应用自身的业务没有多大的关系,所以它们完全可以独立成一个单独的服务存在,但是它们被剥离、独立出来后,并不是给各个微服务调用,而是在API网关服务上进行统一调用来对微服务接口做前置过滤,以实现对微服务接口的拦截和校验;

                        Spring Cloud Zuul提供了一套过滤器机制,可以很好地支持这样的任务;

                        开发者可以通过使用Zuul来创建各种校验过滤器,然后指定哪些规则的请求需要执行校验逻辑,只有通过校验的才会被路由到具体的微服务接口,不然返回错误提示;

2、快速入门

    1.1  构建网关

          pom.xml中引入spring-cloud-starter-zuul依赖;

          启动类加@EnableZuulProxy注解开启Zuul的API网关服务功能

    1.2  请求路由

          面向服务的路由

              Spring Cloud Zuul实现了与Spring Cloud Eureka的无缝整合,我们可以让路由的path不是具体的URL,而是让它映射到某个具体的服务,而具体的URL则交给Eureka的服务发现机制去自动维护

              pom中引入spring-cloud-starter-eureka依赖;

              a,Zuul允许开发者在API网关上通过   自定义过滤器    来实现对请求的拦截与过滤

                  自定义过滤器  需要继承ZuulFilter抽象类并实现它定义的4个抽象函数  即可完成对请求的拦截与过滤;

package com.an.filter;

import com.netflix.zuul.ZuulFilter;

public class AccessFilter extends ZuulFilter {

  @Override
public String filterType() {
return null;
} @Override
public int filterOrder() {
return 0;
} @Override
public boolean shouldFilter() {
return false;
} @Override
public Object run() {
//...
return null;
}
}

              b,在启动类注入自定义过滤器;    

package com.an;

import com.an.filter.AccessFilter;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean; /**
* @EnableZuulProxy 开启Zuul的API网关功能
*/
@EnableZuulProxy
@SpringCloudApplication
public class ZuulApplication {
public static void main(String[] args){
new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
} @Bean
public AccessFilter accessFilter(){
return new AccessFilter();
}
}

      

SpringCloud---API网关服务---Spring Cloud Zuul的更多相关文章

  1. 网关服务spring cloud zuul

    Zuul例子配置文件 spring.application.name=switch-gateway server.port=5555 请求路由 传统路由方式 zuul.routes.api-a-url ...

  2. API网关服务Zuul-Spring Cloud学习第五天(非原创)

    文章大纲 一.Zuul是什么二.Zuul的基本实现三.路由配置细节四.异常处理细节五.项目源码与参考资料下载六.参考文章   一.Zuul是什么   到目前为止,我们Spring Cloud中的内容已 ...

  3. 网关服务Spring Cloud Gateway(一)

    Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使 ...

  4. api网关揭秘--spring cloud gateway源码解析

    要想了解spring cloud gateway的源码,要熟悉spring webflux,我的上篇文章介绍了spring webflux. 1.gateway 和zuul对比 I am the au ...

  5. 网关服务Spring Cloud Gateway(二)

    上一篇文章服务网关 Spring Cloud GateWay 初级篇,介绍了 Spring Cloud Gateway 的相关术语.技术原理,以及如何快速使用 Spring Cloud Gateway ...

  6. 网关服务Spring Cloud Gateway(三)

    上篇文章介绍了 Gataway 和注册中心的使用,以及 Gataway 中 Filter 的基本使用,这篇文章我们将继续介绍 Filter 的一些常用功能. 修改请求路径的过滤器 StripPrefi ...

  7. Consul集群加入网关服务(Spring Cloud Gateway)

    Consul集群加入网关服务 架构示意图 外部的应用或网站通过外部网关服务消费各种服务,内部的生产者本身也可能是消费者,内部消费行为通过内部网关服务消费. 一个内部网关和一个外部网关以及一个Consu ...

  8. Spring Cloud Zuul 1(API 网关服务)

    API网关是一个更为智能的应用服务器,它的存在就像是整个微服架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤. 它实现的功能包括:请求路由.负载均衡.校验过滤等功能. Spring ...

  9. SpringCloud开发学习总结(八)—— API网关服务Zuul(一)

    大多数情况下,为了保证对外服务的安全性,我们在服务端实现的为服务接口时往往都会有一定的权限校验机制,比如对用户登录状态的校验等:同时为了防止客户端在发起请求时被篡改等安全方面的考虑,还会有一些签名校验 ...

随机推荐

  1. PrintWriter类

    PrintWriter是一种过滤流,也是一种处理流,即能对字节流和字符流进行处理. 1.查询API后,我们发现,会有八种构造方法.即: PrintWriter(File file) Creates a ...

  2. perl读取excel

    因为工作当中遇到要处理大数据的excel的玩意,最多的有几十万行.用perl的方式试试,看看效果如何. ppm install OLE::Storage_Lite #如果不安装这个,后面两个安装不了 ...

  3. 设计模式7---Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中.这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码.JVM虚拟机读取字节码文件,取出 ...

  4. 负载均衡-会话保持,session同步(转载)

    一,什么负载均衡一个新网站是不要做负载均衡的,因为访问量不大,流量也不大,所以没有必要搞这些东西.但是随着网站访问量和流量的快速增长,单台服务器受自身硬件条件的限制,很难承受这么大的访问量.在这种情况 ...

  5. 《T-SQL查询》- SQL逻辑处理

    下面列出SQL查询语句的一般形式,以及各个子句被逻辑处理的顺序步骤: (8) SELECT (9) DISTINCT (11) <TOP_specification> <select ...

  6. day 21 01 序列化模块和模块的导入的复习以及包的初识

    day 21 01 序列化和模块的导入的复习以及包的初识 1.序列化模块 什么是序列化模块:数据类型转化成字符串的过程就是序列卷 为什么要使用序列化模块:为了方便存储和网络传输 三种序列化模块: (1 ...

  7. 微软2014实习生招聘笔试第2题 the k-th string

    Time Limit: 10000msCase Time Limit: 1000msMemory Limit: 256MB Description Consider a string set that ...

  8. python3.5在内存中获取远程图片尺寸

    自已看看,用于获取选程图片的尺寸 >>> from io import BytesIO>>> import requests as rs>>> f ...

  9. 为微软ContosoUniversity例子加上学生自选课程计划

    把ContosoUniversity例子过了一遍,好象还是有很多东西未能理解,决定自己随便加个功能看可以自己完成不.... 从github的例子中clone下来ContosoUniversity项目, ...

  10. asp.net mvc项目创建WebApi简单例子

    1.创建默认路由的映射. namespace RedisDemo.App_Start { public class WebApiConfig { public static void Register ...