微服务---Spring Cloud Alibaba 05(网关)

Spring Cloud Alibaba微服务架构实战教程—01实战系列教程开篇 SpringCloud-Alibaba微服务架构实战教程—01开篇SpringCloud-Alibaba微服务架构实战教程—01开篇前言技术栈 SpringCloud-Alibaba微服务架构实战教程—01开篇 此项目源自智慧城市方案中的部分需求,是一个结合SpringCloud,SpringCloudAlibaba、Dubbo等技术栈,进行的微服务实战开发案例,长达3万多字的手把手教程,图文并茂,细节到极点,基本囊括了微服务架构中常用技能点,全面覆盖微服务中各种问题的解决方案,是新手入门、初中级开发提升 阅读详情

一、网关概念

 

        出现:我们知道,一个大型系统在设计时,经常会被拆分为很多个微服务。那么作为客户端要如何去调用 这么多的微服务呢?客户端可以直接向微服务发送请求,每个微服务都有一个公开的URL,该URL可以直接映射到具体的微服务,如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的架构,会存在着诸多的问题,例如,客户端请求不同的微服务可能会增加客户端代码或配置的复杂性。还有就是每个服务,在调用时都需要独立认证。并且存在跨域请求,也在一定程度上提高了代码的复杂度。基于微服务架构中的设计及实现上的问题,为了在项目中简化前端的调用逻辑,同时也简化内部服务之间互相调用的复杂度,更好保护内部服务,提出了网关的概念。

        定义:网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。

        功能:

SpringCloud Gateway 优缺点:

        优点:

  1. 性能强劲:是第一代网关Zuul的1.6倍。
  2. 功能强大:内置了很多实用的功能,例如转发、监控、限流等
  3. 设计优雅,容易扩展。

        缺点:

  1. 依赖Netty与WebFlux(Spring5.0),不是传统的Servlet编程模型(Spring MVC就是基于此模型实现),学习成本高。
  2. 需要Spring Boot 2.0及以上的版本,才支持

二、网关实现

 1.导入pom依赖

        <!--网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

2.添加配置文件

server:
  port: 9000
spring:
  application:
    name: sca-gateway
  cloud: #微服务
    nacos:
      discovery:
        server-addr: localhost:8848
    sentinel:
      transport:
        dashboard: localhost:8180 #Sentinel 控制台地址
        port: 8719 #客户端监控API的端口  端口被占用会递增
      eager: true  #取消Sentinel控制台懒加载,即项目启动即连接
    gateway:
      routes: #网关路由的定义(后续可以定义多个路由,唯一标识是id)
        - id: router01 #自定义,具有唯一性
          # uri: http://localhost:8081/  #定义请求转发的uri   这里固定了,我们要负载均衡,所以注释
          uri: lb://sca-provider #lb为服务前缀,不能随意写
          predicates:  #请求逻辑设计,又叫谓词,http://localhost:9000/nacos/provider/echo/sca
            - Path=/nacos/provider/echo/**
          filters:    #过滤规则定义,当predicates返回值为true则执行filter
            - StripPrefix=1 #StripPrefix标识去掉访问路径path中的第一层目录

路由(Route) 是 gateway 中最基本的组件之一,表示一个具体的路由信息载体,主要定义了下面的几个信息:

  1. id,路由标识符,区别于其他 Route。
  2. uri,路由指向的目的地 uri,即客户端请求最终被转发到的微服务。
  3. predicate,断言(谓词)的作用是进行条件判断,只有断言都返回真,才会执行路由,这里我们使用的是判断第一层目录,还有其他,如时间,请求头等...
  4. filter,过滤器用于修改请求和响应信息。

3.创建启动类进行测试

package com.cy;

@SpringBootApplication
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class,args);
    }
}

访问加上谓词的目标地址

 访问成功

三、网关负载均衡

        网关才是服务访问的入口,所有服务都会在网关层面进行底层映射,所以在访问服务时,要基于服务serivce id(服务名)去查找对应的服务,让请求从网关层进行均衡转发,以平衡服务实例的处理能力。

1.导入pom依赖

添加nacos服务发现依赖

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.修改配置文件

把原来固定的uri更换成lb为前缀的服务名

 gateway:
      routes: #网关路由的定义(后续可以定义多个路由,唯一标识是id)
        - id: router01 #自定义,具有唯一性
          # uri: http://localhost:8081/  #定义请求转发的uri   这里固定了,我们要负载均衡,所以注释
          uri: lb://sca-provider #lb为服务前缀,不能随意写
          predicates:  #请求逻辑设计,又叫谓词,http://localhost:9000/nacos/provider/echo/sca
            - Path=/nacos/provider/echo/**
            ## - Header=X-Request-Id, \d+
          filters:    #过滤规则定义,当predicates返回值为true则执行filter
            - StripPrefix=1 #StripPrefix标识去掉访问路径path中的第一层目录

3.测试网关负载均衡

 

 可以看到负载均衡测试成功

四、网关的执行流程

         客户端向Spring Cloud Gateway发出请求。 如果Gateway Handler Mapping 通过断言predicates(predicates)的集合确定请求与路由(Routers)匹配,则将其发送到Gateway Web Handler。 Gateway Web Handler 通过确定的路由中所配置的过滤器集合链式调用过滤器(也就是所谓的责任链模式)。 Filter由虚线分隔的原因是, Filter可以在发送代理请求之前和之后运行逻辑。处理的逻辑是 在处理请求时 排在前面的过滤器先执行,而处理返回相应的时候,排在后面的过滤器先执行。

重要概念:

 五、网关限流设计实现

        网关是所有外部请求的公共入口,所以可以在网关进行限流,而且限流的方式也很多,我们采用Sentinel组件来实现网关的限流。

1.导入pom依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
//网关限流(路由层面)
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>

2.添加Sentinel配置文件

sentinel:
  transport:
    dashboard: localhost:8180 #Sentinel 控制台地址
    port: 8719 #客户端监控API的端口
  eager: true  #取消Sentinel控制台懒加载,即项目启动即连接

3.启动网关,检测sentinel控制台网关菜单是否变化

启动时需要添加jvm参数,可以让网关服务在sentinel中显示不一样的菜单

-Dcsp.sentinel.app.type=1

 重启Sentinel服务检查菜单变化

 这样则表示配置成功

4.设置限流策略

 注意:API名称要与配置文件里的路由id相同

5.测试

 测试成功,频繁访问被限流

6.基于请求属性限流

 在postman进行测试

 7.自定义API维度限流

        自定义API分组,是一种更细粒度的限流规则定义,它允许我们利用sentinel提供的API,将请求路径进行分组,然后在组上设置限流规则即可。

新增API分组:

 新建分组流控规则:

 进行测试

 

aa或bb每5秒只能访问一次,否则报错

8.自定义异常

系统自定义的异常处理返回

系统自定义的异常不能满足我们的需求,我们需要自定义报错返回值

@Configuration
public class GatewayConfig {
    public GatewayConfig(){
        GatewayCallbackManager.setBlockHandler( new BlockRequestHandler() {
            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
                Map<String,Object> map=new HashMap<>();
                map.put("state",429);
                map.put("message","two many request");
                String jsonStr=JSON.toJSONString(map);
                return ServerResponse.ok().body(Mono.just(jsonStr),String.class);
            }
        });
    }
}

总结

  1. 网关(Gateway)诞生的背景?(第一:统一微服务访问的入口,第二:对系统服务进行保护,第三进行统一的认证,授权,限流)
  2. 网关的选型?(Netifix Zuul,Spring Cloud Gateway,…)
  3. Spring Cloud Gateway的入门实现(添加依赖,路由配置,启动类)
  4. Spring Cloud Gateway中的负载均衡?(网关服务注册,服务的发现,基于uri:lb://服务id方式访问具体服务实例)
  5. Spring Cloud Gateway中的断言配置?(掌握常用几个就可,用时可以通过搜索引擎去查)
  6. Spring Cloud Gateway中的过滤器配置?(掌握过滤器中的两大类型-局部和全局)
  7. Spring Cloud Gateway中的限流设计?(rout-id,API分组)
S7-1200模拟量 将两种不同的金属或合金金属焊接起来,构成一个闭合回路,利用温差电动势来测量温度,当两端存在温度梯度时,回路中就会有电流通过,此时两端之间就存在电动势--热电动势,这就是所谓的塞贝克效应(seebeck effect)。温差越大,热电动势越高。热电偶是有正负极性的,所以需要确保导线连接到正确的极性,否则会造成明显的测量误差。为了使温度补偿达到最佳效果,必须将热电偶模块安装在温度稳定的环境中简述:两种金属,每一种金属随温度变化是不同的,出现温差--由俩金属构成的回路就会有电流经过,因此两端形成热电动势。 阅读详情

相关推荐

Android Studio中把llama.cpp编译Android .so

本文介绍了一个在Android Studio中集成llama.cpp的最小Demo实现方案,通过JNI将llama.cpp编译为Android.so库,实现本地加载GGUF模型进行文本生成。文章详细说明了项目结构配置(SDK≥30,NDK≥28)、CMake编译设置、Kotlin-JNI-C++的完整调用链实现,以及模型文件部署方式。该Demo采用每次请求新建上下文的简化设计,包含加载模型、生成文本、资源释放等核心功能,并提供了错误排查建议。项目舍弃了上下文保持等复杂功能以确保稳定性,适合作为端侧大语言模型

Zhang Phil 523

高可复用接口返回类

package com.mmall.common; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.map.annotate.JsonSerialize; import java.io.Serializable; /** * Created by geely */ @JsonSeri

zkdceo的专栏 666

手把手教你用LcmSim+TakeDotLib打造完美LCD显示效果(附12x12汉字配置模板)

本文详细介绍了如何使用LcmSim模拟器与TakeDotLib标准字库工具优化LCD显示效果,包括字体选择、字库生成和实体设备验证。通过12x12汉字与8x16 ASCII的黄金比例配置,帮助开发者解决嵌入式开发中的显示难题,提升用户体验。附赠12x12汉字配置模板,可直接用于项目。

weixin_29205061的博客 137

Spring Boot:无法导入ServerResponse的jar包

1.下载spring-webflux-5.0.1.RELEASE 这个jar包 2.选中项目单击右键----找到open module settings 弹出下框: 最后直接在方法里面导入即可

cici的博客 919

Realtek 10GbE芯片组解析:低成本高速网络方案

10GbE(万兆以太网)技术通过提升网络带宽,显著改善了数据传输效率,成为现代网络架构的核心组件。其工作原理基于高速串行通信协议,通过优化信号处理和编码技术实现低延迟、高吞吐量。在技术价值上,10GbE不仅满足数据中心和企业网络的高需求,还逐步渗透到消费级市场,推动家庭和小型企业的网络升级。应用场景包括NAS存储、视频编辑工作站和云服务接入等。Realtek最新发布的RTL8127、RTL8159和RTL8261C芯片组,以低功耗和低成本优势,进一步降低了10GbE的普及门槛。这些芯片支持PCIe Gen4

weixin_36427956的博客 589

工作:三菱PLC与伺服之CC-Link IE Field Network通讯应用

CC-LINK-IE

好记性不如烂笔头 2万+

SpringCloud---Gateway应用实践

网关简介 背景分析 我们知道,一个大型系统在设计时,经常会被拆分为很多个微服务。那么作为客户端要如何去调用 这么多的微服务呢?客户端可以直接向微服务发送请求,每个微服务都有一个公开的URL,该URL可以直接映射到具体的微服务,如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的架构,会存在着诸多的问题,例如,客户端请求不同的微服务可能会增加客户端代码或配置的复杂性。还有就是每个服务,在调用时都需要独立认证。并且存在跨域请求,也在一定程度上提高了代码的复杂度。基于微服...

weixin_58668484的博客 1113

【Pico手势开发实战】基于SteamVR串流与MRTK3的跨平台交互方案

本文详细介绍了在Pico设备上,结合SteamVR串流与微软MRTK3框架,实现高效跨平台手势交互开发的完整方案。该方案通过在PC端运行Unity项目并串流至头显,利用MRTK3封装的手势识别与交互组件,大幅提升了开发调试效率与性能上限,并确保了未来向其他OpenXR设备的良好兼容性。

weixin_29001683的博客 217

Server returned HTTP response code: 500 for URL:

在java 后端调用URLConnection post 请求时,浏览器测试(asmx)正常,java后端返回Server returned HTTP response code: 500 for URL: 问题原因      认真检查 url 和请求参数后 1 可能是编码问题 2 需要设置如下内容  conn.setRequestProperty("Connecti

javahepeng的专栏 3万+

2023年全国职业院校技能大赛 网络系统管理服务模块 Linux部分讲解

网络系统管理,Linux,服务部署,Chinaskills,2023国赛

weixin_62926639的博客 1549

Node-RED教程(一):Node-RED的介绍与安装

最新最全的Node-RED,node-red教程都在这里。 本篇介绍node-red的安装。使用docker 安装node-red

知无涯 3万+

Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包

Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包:servlet-api.jar,并将scope设置为provided。 pom.xml: <dependency><groupId>javax.servlet</groupId><artifactId&...

weixin_34290096的博客 1296

【NI Multisim 14.0原理图设计基础——元器件分类】

电阻(RESISTOR):该元器件栏中的电阻都是标称电阻,是根据真实电阻元器件而设计的,其电阻值不能改变。 排阻(RESISTOR PACK):相当于多个电阻并列封装在一个壳内,它们具有相同的阻值。 电位器(POTENTIOMETER):即可调电阻,可以通过键盘字母动态调节电阻,大写表示增加电阻值,小写表示减小电阻值,调节增量可以设置。 电容(CAPACITOR):所有电容都是无极性的,不能改变参数,没有考虑误差,也未考虑耐压大小。 电解电容器(CAP_ELECTROLIT):所有电容都是有极性的,“+”极

RL2698853114的博客 4万+

Spring Cloud Alibaba 05_使用微服务网关 Gateway 实现路由映射和API限流

Spring Cloud Alibaba 05_使用微服务网关 Gateway 实现路由映射和API限流 注:Gateway 是 SpringCloud 官方提供的新一代网关组件,是基于Netty 的,与 Servlet 不兼容 所以在 gateway 中不能出现 Servlet 相关的组件,不能使用 spring web 依赖! 手动配置路由映射: 删除父工程中的 spring web 依赖,然后在 Provider 和 Comsumer 中重新添加: <dependency> &l

BLU_111的博客 11万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Spring Cloud Alibaba 微服务全家桶

本文全面介绍了SpringCloud微服务架构的核心组件及其应用,重点讲解了SpringCloud Gateway、Nacos、Sentinel和Seata四大组件。 SpringCloud Gateway部分详细阐述了其作为API网关的功能特性,包括路由配置、断言规则、过滤器链以及熔断降级等核心功能,并提供了动态路由、跨域配置等实际应用场景的实现方案。 Nacos章节系统介绍了其作为注册中心和配置中心的双重角色,详细说明了单机和集群部署方式,以及如何与微服务进行集成配置。 Sentinel部分深入讲解了流

油墨香^-^的博客 1320

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring Cloud Alibaba——Gateway

Spring Cloud Gateway 允许开发者自定义过滤器,以实现特殊的业务需求。自定义过滤器可以分为两类:全局过滤器和局部过滤器。全局过滤器适用于所有路由,而局部过滤器仅适用于特定路由。全局过滤器示例@Component@Override@Override// 执行顺序局部过滤器示例通过实现@Component@Override}));

国家专精特新小巨人、资深消防行业企业、国家高新技术企业、智慧消防技术实验室、准独角兽企业、浙江省电流AI技术研发中心 1357

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

科普文:微服务之技术选型 Spring Cloud Alibaba

由于篇幅限制,在这里我们将详细讲解。互联网时代,面对复杂业务,讲究 分而治之。将一个大的单体系统拆分为若干个微服务,保证每个系统的职责单一,可以垂直深度扩展。但是一个个独立的微服务像一座座孤岛,如何将他们串联起来,才能发挥最大价值。“话说天下大势,分久必合、合久必分”这时,我们就要提微服务的生态圈。那么微服务生态圈都有哪些模块?他们的作用分别是什么?。生产者启动时,会将自己的信息注册上报,这样调用方只需连接注册中心,根据一定的负载算法,就可以与服务提供方建立连接,从而实现应用间的解耦。。

为无为,事无事,味无味。 1597

Spring Cloud & SpringCloud Alibaba(一套标准化的微服务解决方案)

本文介绍了Spring Cloud微服务架构的基本概念、系统架构演变过程以及核心组件。主要内容包括:Spring Cloud作为微服务落地方案的优势,支持分布式系统开发,提供服务发现、负载均衡等功能;Spring Cloud Alibaba作为补充方案,具备高性能、高可用特性;微服务基础环境搭建步骤,创建父工程聚合管理多个微服务模块。文章通过架构图对比了单体架构、动静分离架构、分布式架构和微服务架构的差异,并提供了Spring Cloud与Spring Boot版本对应关系参考。

m0_48853274的博客 845

整合Spring Cloud Alibaba 组件

Spring Cloud Alibaba 是基于 Spring Cloud 生态系统的一套解决方案,它为开发者提供了一系列用于构建微服务的组件。其核心目标是简化微服务的开发和运维,提升服务的可用性和可靠性。Nacos(动态服务发现、配置和服务管理平台)是 Spring Cloud Alibaba 的核心组件之一。它提供了服务注册与发现、动态配置管理和服务管理功能。Sentinel 是一款轻量级的流量控制与熔断降级组件,它为微服务提供了高可用保障。

weixin_44692308的博客 1136

spring-cloud-alibaba学习项目

spring-cloud-alibaba项目练习,实现nacos注册配置中心、openFeign服务调用、sentinel降级、gateway网关、log4j2日志记录

810cheng 2135

Spring Cloud Alibaba微服务电商平台实战:mall-swarm架构设计与企业级应用

在传统电商系统开发中,我们常常面临这样的困境:随着业务增长,单体应用变得越来越臃肿,数据库连接数达到瓶颈,一个小小的功能修改需要重新部署整个系统,团队协作效率低下。特别是在电商场景下,大促期间的流量洪峰更是让系统稳定性面临严峻考验。这些痛点正是驱动我们探索微服务架构的根本原因。 **技术要点**:单体架构的局限性主要体现在代码耦合度高、部署困难、技术栈固化、团队协作效率低、系统扩展性差等方面。

gitblog_00067的博客 443

基于Spring Boot、Spring Cloud & Alibaba、OAuth2的分布式微服务架构权限管理系统

平台简介 采用前后端分离的模式,微服务版本前端(基于 RuoYi-Vue)。 后端采用Spring Boot、Spring Cloud & Alibaba。 注册中心、配置中心选型Nacos,为权限认证使用OAuth2。 感谢ruoyi-cloud-design,pig。 如需不分离应用,请移步 RuoYi,如需分离应用,请移步 RuoYi-Vue 阿里云优惠券:点我进入,腾讯云优惠券:点我领取 系统模块 com.ruoyi ├── ruoyi-ui // 前端框架 [80

m0_48487801的博客 1481

科普文:万字细说微服务及其框架Netflix,Spring Cloud,Spring Cloud Alibaba梳理

微服务(Microservices)是一种软件架构风格,它将单一的应用程序拆分为多个小的服务,每个服务都是独立运行和部署的。每个微服务通常只专注于一个业务功能,具有自己的数据存储,并且通过轻量级的通信机制(如HTTP或消息队列)与其他服务进行交互。 微服务发展到现在,不仅仅只是服务治理,从架构设计,编码,测试,部署运维(版本管理、CICD集成发布,部署,故障跟踪、负载均衡、弹性扩展、容器化、云原生 ),服务治理(负载均衡、弹性扩展、故障跟踪、容错),再结合需求分析、产品设计,微服务基本是涵盖了软件工程的整

为无为,事无事,味无味。 2274

SpringCloud Alibaba 从入门到精通(精选)

SpringCloud Alibaba 从入门到精通 一. 课程介绍 1.1 课程导学 什么是SpringCloudAlibaba? 阿里巴巴结合自身微服务实践,开源的微服务全家桶 在Spring Cloud项目中孵化,很可能成为Spring Cloud第二代标准的实现 在业界广泛使用,已有很多成功案例 Spring Cloud Alibaba真实应用场景 大型复杂的系统,例如大型电商系统 高并发系统,例如大型门户,秒杀系统 需求不明确,且变更很快的系统,例如初创公司业务系统 Sprin

暗余的博客 3万+

Spring Cloud Alibaba-05-Gateway网关-01-简介、快速开始、Naocs读取配置

Spring Cloud Alibaba-05-Gateway网关-01-简介、快速开始、Naocs读取配置网关简介Gateway简介什么是spring cloud gateway为什么要使用网关Gateway核心架构Gateway快速开始创建一个 spring-cloud-gateway的模块,导入相关依赖创建主类添加配置文件启动项目, 并通过网关去访问微服务Gateway访问进阶,Nacos 读取配置加入Ncaos依赖主类上添加注解修改配置文件测试。

苍云烟 1365

Spring Cloud Alibaba-01-微服务介绍

Spring Cloud Alibaba-01-微服务介绍微服务简介**架构的演变**微服务架构与SOA架构的不同微服务架构的常见问题微服务架构的常见概念服务治理服务调用服务网关服务容错链路追踪微服务架构的常见解决方案Spring Cloud Alibaba 主要功能与组件**主要功能**组件架构的演变把所有功能都集中在一个应用中,统一部署,开发成本、部署成本和维护成本低,我们会把它们做成一个web项目,然后部署到一台tomcat服务器上。

苍云烟 1348
上一篇: 微服务---Spring Cloud Alibaba 04(Sentinel)
下一篇: 微服务---Spring Cloud Alibaba 06(微服务项目---文件上传)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值