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. C#函数式程序设计之泛型(上)

    在面向对象语言中,我们可以编写一个元素为某个专用类型(可能需要为此创建一个ListElement)的List类,或者使用一个非常通用.允许添加任何类型元素的基类(在.NET中,首先想到的是System ...

  2. Code First ef SQL Server 版本不支持数据类型“datetime2”

    When calling DbContext.SaveChanges, I get a DbUpdateException:An unhandled exception of type 'System ...

  3. Consul KV

    Consul之:key/value存储 key/value作用 动态修改配置文件 支持服务协同 建立leader选举 提供服务发现 集成健康检查 除了提供服务发现和综合健康检查,Consul还提供了一 ...

  4. ExtJS浏览器对象模型BOM——命名空间和用户代理对象、Cookie

    BOM(浏览器对象模型(BrowserObjectModel)),允许访问和操控浏览器窗口.研发者通过使用BOM,可移动窗口.更改状态栏文本.执行其它不与页面内容发生直接联系的操作. 本文将从ExtJ ...

  5. 4.Python的版本

    Python2: 英文支持没问题,中文报错,默认编码:ascii码 显示中午需要添加代码在首行:# -*- encoding:utf -8 -*- 用户交互  raw_input python2 里还 ...

  6. DIOCP (一) DIOCP常见问题。

    1,IOCP是什么? 答:IOCP是windows下的服务器技术,并不是所有windows都能使用IOCP,只能在支持IOCP的windows操作系统上使用. 2,DIOCP是什么? 答:DIOCP是 ...

  7. fillna()

    将下面注释掉 fillna() 函数:有一个inplace参数,默认为false,不会对原来dataframe中进行替换,为True时候会修改原来的.

  8. sublime基本命令和使用

    Ctrl+Shift+p  Package Control Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑)Ctrl+G 跳转到相应的行Ctrl+J 合并行(已选 ...

  9. CodeForces - 396C On Changing Tree(树状数组)

    题目大意 给定一棵以1为根的树,初始时所有点为0 给出树的方式是从节点2开始给出每一个点的父亲 然后是 $m$ 次操作,分为两种 $1 v,k,x$ 表示在以v为根的子树中的每一个点上添加 $x-i* ...

  10. 五,Smarty模板技术/引擎——自定义函数机制

    自建函数是smarty提供的函数,不允许修改,只能被调用: 自定义函数是自己编写函数,注册成为smarty的函数,之后可以被调用: 示例:使用smarty自定义函数的机制,编写一个函数myfun1,通 ...