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. Ceph介绍

    1. 介绍 云硬盘是IaaS云平台的重要组成部分,云硬盘给虚拟机提供了持久的块存储设备.目前的AWS 的EBS(Elastic Block store)给Amazon的EC2实例提供了高可用高可靠的块 ...

  2. Java 栈与堆简介

    一.前言 长久以来,一直被Java的内存分配问题,堆和栈问题困扰好久,面试的时候也非常心虚,这几天好好通过看书和技术博客来整理了一下,希望能找到我自己的理解方式. 二.内存 内存分物理内存和虚拟内存, ...

  3. sqpark编译时maven的pom文件内容(org.apachetype.maven.apachetypes:maven.archetypequickstat)

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  4. hdu 4284 Travel(壮压DP&TSP&floyd)

    Travel Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  5. Delphi xe5如何使用Bluestacks模拟器(用真机或者用猩猩,夜神模拟器,自带的不好用)

    首先,关于这个模拟器问题比较纠结,这是一个关于adb的问题. Delphi XE5会自动识别模拟器和真机,但是你必须先打开模拟器在打开Delphi IDE(Delphi开发环境),否则还得麻烦一会儿. ...

  6. 微软 eshop 数据存储之sqlserver

    微软的eshop项目写的很牛,学起来也比较吃力,最近公司刚好有一本书,说的就是.NET微服务,记下来. 因为微软对性能的要求,docker里面要有内存要求 安装dokcer,拉镜象 : docker ...

  7. Asp.Net Core下的两种路由配置方式

    与Asp.Net Mvc创建区域的时候会自动为你创建区域路由方式不同的是,Asp.Net Core下需要自己手动做一些配置,但更灵活了. 我们先创建一个区域,如下图 然后我们启动访问/Manage/H ...

  8. Qt学习(二):项目学习

    1. 概述 Qt做UI设计后,通常会生成Form Files文件夹下的ui文件.Generated File文件夹下的ui_xxx等头文件和源文件.Header Files文件夹下的头文件.Sourc ...

  9. layui与多级联动返填

    <script> layui.use(['form', 'layer'], function () { $ = layui.jquery; var form = layui.form() ...

  10. 纯Css3手工打造网页图片效果

    .rotate-demo { width: 220px; height: 220px; margin: 0 auto; background: no-repeat url("http://i ...