SpringCloud——服务网关

SpringCloud_Gateway服务网关 在gateway9527服务的com.zzx.config包下,创建日志网关过滤器类LogGatewayFilterFactory/*** 日志网关过滤器} /*** 表示配置填写顺序* @return} /*** 执行过滤的逻辑* @returnlog . info("********* consoleLog日志 开启 ********");});} /*** 过滤器使用的配置内容} }/*** 日志网关过滤器} /** 阅读详情

SpringCloud——服务网关

1、背景

上篇博客《SpringCloud——Eureka服务注册和发现》中介绍了注册中心Eureka、服务提供者和服务消费者。这篇博客我们将介绍服务网关。

图(1) 未使用服务网关的做法
这里写图片描述

图(2) 服务网关的做法
这里写图片描述

服务网关,英文Service GateWay,他是微服务框架中唯一的入口。有些类似外观模式,对外只提供一个访问的入口。这样做的好处有很多,减少了客户端多次调用微服务,也可以在“入口”处进行负载或权限的处理。

在SpringCloud Netflix中,Zuul就是这样一个角色。

2、实例

1)、Zuul环境搭建

引入jar包

       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>

在Application中开启Zuul

@EnableZuulProxy
@SpringCloudApplication  //整合了@SpringBootApplication、@EnableDiscoveryClient、@EnableCircuitBreaker,主要目的还是简化配置
public class ZuulApplication {
    public static void main(String[] args) {
        new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
    }
    }

Zuul环境搭建完毕之后,我们就可以来看他的主要功能了,包括服务路由和服务过滤。

2)、路由配置

方法一:url配置
在application.properties中,进行如下配置。

zuul.routes.api-a-url.path=/api-a-url/**
zuul.routes.api-a-url.url=http://localhost:2222/

之后,我们就可以通过”/api-a-url”来代替”http://localhost:2222/“进行访问,类似修改本地hosts文件来设置域名。这种方式屏蔽了ip和端口。

缺点: url路由粒度过粗。需要知道所有服务地址才能完成映射。

方法二:服务映射(serviceId)
既然eureka中已经有我们的配置信息,那我们可以借助他来完成地址映射。

zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceId=compute-service
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

3)、服务过滤

定义过滤

public class AccessFilter extends ZuulFilter {

    /*filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:
    pre:可以在请求被路由之前调用
    routing:在路由请求时候被调用
    post:在routing和error过滤器之后被调用
    error:处理请求时发生错误时被调用
    filterOrder:通过int值来定义过滤器的执行顺序
    shouldFilter:返回一个boolean类型来判断该过滤器是否要执行,所以通过此函数可实现过滤器的开关。在上例中,我们直接返回true,所以该过滤器总是生效。
    run:过滤器的具体逻辑。需要注意,这里我们通过ctx.setSendZuulResponse(false)令zuul过滤该请求,不对其进行路由,然后通过ctx.setResponseStatusCode(401)设置了其返回的错误码,当然我们也可以进一步优化我们的返回,比如,通过ctx.setResponseBody(body)对返回body内容进行编辑等。
    */
    @Override
    public Object run() {
         RequestContext ctx = RequestContext.getCurrentContext();
            HttpServletRequest request = ctx.getRequest();
            Object accessToken = request.getParameter("accessToken");  //定义规则:访问url中必须带有accessToken参数
            if(accessToken == null) {
                ctx.setSendZuulResponse(false);
                ctx.setResponseStatusCode(401);
                return null;
            }
            return null;

    }
    ……
}

实例化

    //实例化过滤器
    @Bean
    public AccessFilter accessFilter() {
        return new AccessFilter();
    }

启动项目,如果访问的url中不含有accessToken参数则会报错,只有包含该参数的请求url才会被放行。

3、小结

Zuul的主要功能:负载均衡、服务路由、服务过滤等,并不是新鲜的东西。api gateway类似外观模式,提供统一的入口。负载均衡和路由和Nginx的功能很像,过滤和权限管理类似shiro的权限配置。

万变不离其宗,目的都是在于把这些与服务本身关系不大的东西剥离出来,而且是越早剥离越好,能在Controller处理的绝不放在Service,能在转发前处理的就不要留到转发后。类似大家说的服务的无状态性,over!


6-Spring Cloud Alibaba实战-Gateway网关核心架构 官方指南:https://cloud.spring.io/spring-cloud-gateway/reference/html/#route-metadata-configuration大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么 多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的架构,会存在着诸多的问题:客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性认证复杂,每个服务都需要独立认证。存在跨域请求,在一 阅读详情

相关推荐

SpringCloud——GateWay网关(详解+案例)

目录 一、相关概念 1、网关概念 2、网关作用 3、网关架构图 4、网关三大核心 二、案例 1、案例说明 2、搭建GateWay网关9527服务 (1)创建maven工程 (2)导入依赖 (3)配置application.yml文件 (4)创建主启动类 3、搭建服务提供者Provider9001 (1)创建maven工程 (2)导入依赖 (3)配置application.yml文件 (4)创建主启动类 (5)创建controller 4、搭建Eureka7.....

weixin_50616848的博客 8821

SpringCloud篇:GateWay网关

传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关,客户端只能在本地记录每个微服务的调用地址,当需要调用的微服务数量很多时,它需要了解每个服务的接口,这个工作量很大。 网关作为系统的唯一流量入口,封装内部系统的架构,所有请求都先经过网关,由网关将请求路由到合适的微服务。

qq_54247497的博客 3714

SpringCloud(四)——从什么是服务网关到SpringCloud Gateway

这里写目录标题SpringCloud服务网关——SpringCloud Gateway服务网关简介简介什么是服务网关?网关的作用?Zuul和GatewaySpringCloud Gateway 服务网关服务网关执行步骤SpringCloud Gateway实例演示eureka注册中心producer 服务提供者SpringCloud Gateway 服务网关启动服务测试 SpringCloud服务网关——SpringCloud Gateway 服务网关简介简介 什么是服务网关? 简单理解服务网关就是一个网

不要总是等明天再开始 3042

Spring Cloud Gateway网关

(一)SpringCloudeGateway基本使用 Spring Cloud Gateway是Spring官方基于Spring5.0、SpringBoot2.0和Project Reactor等技术开发的网 关 旨在为微服务框架提供一种简单而有效的统一的API路由管理方式,统一访问接口。 Spring Cloud Gateway作为Spring Cloud生态体系中的网关,目标是替代Netflix的Zuul,其不仅提供统 一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例

m0_60413225的博客 4414

Spring Cloud服务网关

版本信息 Spring Cloud : Hoxton.SR1 Spring Boot : 2.2.2.RELEASE Zookeeper : 3.5.6 (注册中心使用) 服务网关特性 服务网关是干什么用的? 认证 安全(授权) 动态路由 基于RestTemplate自定义服务网关 服务端演示提供服务 1.添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> &l.

csdnteach的博客 920

Springcloud学习——Zuul服务网关及路由权限控制

Springcloud使用zuul服务网关

程序猿日记本 1万+

springcloud 网关_Spring Cloud - 服务网关

本文对服务网管zuul进行学习,参考文章 服务网关zuul 。请先阅读之前的依赖文章:Spring Cloud - 服务注册与发现Spring Cloud - 服务消费Spring Cloud - 分布式配置Spring Cloud - 断路器 场景:我们之前实现内部服务eureka-client,端口为2001,外部服务eureka-consumer,端口为3001。外部服务consumer提供...

weixin_39580042的博客 114

SpringCloud学习(十)Spring Cloud Gateway服务网关

在SpringBoot2.x版本后,spring出了自己的Spring Cloud Gateway服务网关以替代停止开发进入维护的以及性能不算很好的Zuul。 (一)创建一个gateway-server服务网关子工程 新建工程后,在pom.xml文件中引入以下依赖: <dependencies> <dependency> <gr...

u013068184的博客 912

SpringCloud 2020版本教程2:使用spring cloud gateway作为服务网关

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。 在上一节的案例中,我们讲述了如何使用nacos作为服务注册中心和配置中心,使用feign和sc loadbalancer作为服务调用。本小节将讲述如何使用spring cloud gateway作为服务网关。 工程构建 新建一个gateway的工程,工程目录如下: gateway需要注册到nacos中

方志朋的专栏 1万+

SpringCloud系列:服务网关组件Gateway

SpringCloudGateway是SpringCloud的一个全新的API网关项目,它基于Spring5.0+SpringBoot2.0+WebFlux(基于⾼性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型)等技术开发,性能⾼于Zuul,官⽅测试,SpringCloudGateWay是Zuul的1.6倍,它作为SpringCloud生态系统中的网关,它的目标是替代Zuul,其不仅是提供统一的路由方式,并且还基于Filter链的方式提供了网关的基本功能。...

JHIII的博客 1341

【SpringCloud】服务网关Zuul有什么作用呢,以及该如何使用呢?

一、为什么要有服务网关 我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过Ribbon或Feign实现服务的消费以及均衡负载;通过Spring Cloud Config实现了应用多环境的外部化配置以及版本管理。为了使得服务集群更为健壮,使用Hystrix的融断机制来避免在微服务架构中个别服务出现异常时引起的故障蔓延。 在这样的架构中,...

像风走过八千里 8728

springcloud服务网关详细讲解

1.为什么要用网关?它解决了什么问题? 当我们的微服务越来越多的时候,这时候网关就起到了统筹全局的作用,可以指挥所有的微服务。 解决的问题: 1.统一入口:为全部微服务提供唯一入口点,网关起到外部和内部隔离,保障了后台服务的安全性。 2.鉴权校验:识别每个请求的权限,拒绝不符合要求的请求。 3.动态路由:动态的将请求路由到不同的后端集群中。 4.减少客户端与服务的耦合,服务可以独立发展,通过网关层...

盛难晨 9423

【SpringCloud深入浅出系列】SpringCloud组件之集成Zuul实现服务网关

springcloud 组件之集成 Zuul 实现服务网关一、Zuul 是什么?二、创建项目实现服务网关(一)项目说明(二)创建模块 zuul-proxy1.添加依赖2.添加配置3.启动类添加注解4.启动服务(三)功能实例1.配置路由规则(1)添加配置(2)运行测试2.默认路由规则3.负载均衡4.配置访问前缀5.过滤敏感头信息6.添加host头信息7.查看路由信息(1)添加依赖(2)添加配置(3)查看基本路由信息(4)查看详细路由信息 一、Zuul 是什么? Zuul 是 netflix 开源的一个 AP

邓邓子的博客 1101

[Spring Cloud] GateWay服务网关

Spring Cloud GateWay服务网关

沫洺的博客 392

SpringCloud微服务之SpringCloud Gateway实现服务网关

SpringCloud微服务之SpringCloud Gateway实现服务网关

空山新雨后,天气晚来秋 573

软件测试学习笔记(二)图覆盖

软件测试学习笔记(二)图覆盖 课程链接软件测试_中国大学MOOC 2.1 测试中的图 2.2 图覆盖准则 1、什么是图? 点的集合和边的集合。点或者结点,有穷非空的集合。边是点对。 2、图为什么在软件测试中具有重要地位? 所谓软件测试就是将软件变作一张图,然后覆盖它,不仅仅是软件,图更是计算机科学重要的结构。 3、软件测试中的图是如何得到的? 常见的图可以来自源代码,常见的是控制流图,还有各种各样...

DZFinder的博客 1420

SpringCloud-服务网关-Gateway

SpringCloud Gateway

TOMORROW6COME的博客 1498

NOTE: When using the `ipython kernel` entry point, Ctrl-C will not work.解决方案

本文主要介绍了NOTE: When using the `ipython kernel` entry point, Ctrl-C will not work.解决方案,希望能对使用jupyter notebook的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+
上一篇: EXCEL解析之终极方法WorkbookFactory
下一篇: SpringCloud——Eureka服务注册和发现
jorny_java
博客等级 码龄9年 4粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值