Spring Cloud Alibaba 快速上手搭建公司项目(三)GateWay

news2025/1/11 11:41:42

Gateway是Spring Cloud生态系统中的一个组件,它是一个基于Spring Cloud Gateway的API网关。它提供了一种简单、快速和可扩展的方式来管理微服务之间的请求流量。
它是一个轻量级的API网关,它可以轻松地与Spring Cloud集成,并提供了一些高级功能,如限流、熔断、路由、负载均衡等。它还支持多种协议,包括HTTP、WebSocket、TCP等。

目录

  • 特点
  • 官方文档
  • 工作原理
  • 微服务中整合
  • 集群

特点

简单易用:Spring Cloud Alibaba Gateway非常易于使用,只需要添加相应的依赖即可快速搭建。
高性能:它采用了Nginx作为底层技术,可以提供高性能的请求处理能力。
灵活性:它支持多种路由规则和过滤器,可以根据需要进行自定义配置。
可扩展性:它可以通过插件机制扩展其功能,例如添加自定义过滤器、限流、熔断等功能。
多协议支持:它支持多种协议,包括HTTP、WebSocket、TCP等。

官方文档

GateWay官方文档(4.0.6 其他版本看历史记录)

官网文档对GateWay解释较为详细,下文简单使用几个配置使得请求能够通过网关进行分发。

工作原理

在这里插入图片描述
如官方工作原理图,可以推出以下案例:

前提条件

  1. 具有一个网关服务名称gatewy,端口 9999
  2. 具有一个订单服务名称order, 端口8081
  3. 具有一个仓库服务名称storage,端口8082
  4. 三个服务都已经在Nacos中注册

工作步骤

  1. 所有请求访问的是9999端口。
    例如 获取订单是127.0.0.1:9999/order/getById/1。查询库存是127.0.0.1:9999/storage/getById/1
  2. gateway服务拿到请求后通过负载均衡去把这些请求分按照一定的规则分发到对应服务中。

微服务中整合

依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--特别注意:在 gateway 网关服务中不能引入 spring-boot-starter-web 的依赖,否则会报错-->
        <!-- Spring cloud gateway 网关依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
        <!--客户端负载均衡loadbalancer-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>

poperties文件

spring.cloud.gateway.routes[0].id=my-order 
spring.cloud.gateway.routes[0].predicates[0]=Path=/order/**    # 前缀
spring.cloud.gateway.routes[0].uri=lb://order              #  lb为负载均衡

spring.cloud.gateway.routes[0].id=my-storage
spring.cloud.gateway.routes[0].predicates[0]=Path=/storage/**
spring.cloud.gateway.routes[0].uri=lb://storage

连接Nacos
没有Nacos可以用 Euraka。建议用Nacos,教程参考Spring Cloud & Alibaba 快速上手搭建公司项目(二)Nacos
配置全局过滤(根据需求决定)

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import java.util.Date;

@Component
@Slf4j
public class MyGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("进入自定义的全局过滤器 MyGlobalFilter" + new Date());
        //使用服务提供者传参使用Params方式
        String str = exchange.getRequest().getQueryParams().getFirst("str");
        if (str == null) {
            log.info("参数 str 不能为 null!");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }
    @Override
    public int getOrder() {
        //过滤器的顺序,0 表示第一个
        return 0;
    }
}

集群

这里只说思路
GateWay作为集群时,需要在外部加一层具有分发请求功能的组件(可以是Nginx),用于给网关分发请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你是外包,麻烦不要偷吃零食,注意素质..

我自己没经历过外包&#xff0c;靠自己的所见所闻可能写出来的东西会很主观&#xff0c;所幸我有不少外包的读者&#xff0c;还有几个在外包工作或工作过的朋友&#xff0c;在跟她们深度交流之后&#xff0c;这这里聊一下我自己的一些看法。 注&#xff1a;本文不代表所有外包公…

libtorch教程(一)开发环境搭建:VS+libtorch和Qt+libtorch

前言 事实上&#xff0c;在前面的pytorch部署博客和libtorch的QT部署中笔者已经分享了自己搭建libtorch开发环境的记录。其余并无太多要赘述的。 本教程禁止转载。同时&#xff0c;本教程来自知识星球【CV技术指南】更多技术教程&#xff0c;可加入星球学习。 Transformer、目…

苹果CMS仿T5资源站影视资源分享网站模板

简介&#xff1a; 苹果cms仿T5资源站影视资源分享网站模板&#xff0c;包括首页、详情页、留言页、和播放弹窗&#xff01;适合拿去做资源站&#xff01; 云盘地址&#xff1a; http://zijieyunpan.cn/eF3crCQyWVO 演示&#xff1a;

Android Input子系统 - PhoneWindowManager

基本概念 PhoneWindowManager也是运行于systemserver线程中,在Event事件分发之前处理,比如电源键。Event事件分发后,仅有包含Activity的apk线程才可以处理,如果apk中没有activity但是想处理Event事件怎么办呢?可以在PhoneWindowManager做做文章了。 在SystemServer中, inputM…

数影周报:免费VPN泄露3.6亿条数据,句子互动获数百万美融资

本周看点&#xff1a;免费VPN泄露3.6亿条用户数据&#xff1b;推特信任与安全主管宣布辞职&#xff1b;宣亚国际宣布推出OrangeGPT&#xff1b;亚马逊日本将在关东地区开设两个新物流中心&#xff1b;句子互动完成数百万美元Pre-A轮融资...... 数据安全那些事 免费VPN泄露3.6亿…

黑客松必备|Bear Necessities Hackathon赞助商Workshop汇总

由Moonbeam和AWS Startups联合主办的Bear Necessities Hackathon黑客松启动仪式于5月30日举行。本次黑客松将历时约1个月的时间&#xff0c;包含6个挑战&#xff0c;分别由Moonbeam基金会、Chainlink、StellaSwap、SubQuery、Biconomy提供赞助&#xff0c;总奖池超过5万美金。了…

requests做接口测试

Requests 是用Python语言编写&#xff0c;基于 urllib&#xff0c;采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便&#xff0c;可以节约我们大量的工作&#xff0c;完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的&#xff0c;所以它…

【linux 脚本篇】流程控制语句-case

目录 &#x1f341;案例一&#xff1a;菜单选项 &#x1f342;if语句执行 &#x1f342;case语句执行 &#x1f341;案例二&#xff1a;rsync服务脚本 &#x1f342;if语句执行 &#x1f342;case语句执行 &#x1f341;案例三&#xff1a;nginx服务脚本 &#x1f341;案例四&a…

【收藏】FP独立站建站安心收款经验分享

前几天有个客户咨询我&#xff0c;跟我说了他的疑问。他是在阿里巴巴国际站上面做鞋服&#xff0c;但看到同行在独立站上铺fp&#xff0c;所以他想问问&#xff1a;怎么建立一个独立站并在上面成功推出fp呢&#xff1f;今天&#xff0c;我就来跟有类似诉求的朋友们分享一下&…

企业邮箱保密性评测揭晓:哪个流行的企业邮箱保密性更高?

大多数流行的电子邮件提供商都没有为您的电子邮件提供足够的保护&#xff0c;这已不是什么秘密。在这里我们将了解流行的电子邮件提供商使用的不同类型的加密&#xff0c;以及您如何选择满足您的隐私需求的企业邮箱最佳提供商。 一、谷歌邮箱 默认情况下&#xff0c;Gmail使用T…

element-ui更改单元格字体颜色

作者创建的项目为vue3ts&#xff0c;写法上有些需要注意的点&#xff1a; 如果script 标签使用了 setup&#xff0c;这个时候 export 是没有必要的&#xff0c;也就是使用了setup 后&#xff0c;就不要再写 export 了&#xff0c;不然会报错“A default export must be at the…

(通用0bug)纯原生实现一个类似浏览器搜索功能(ctrl + f)

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 一、问题的描述 由于公司业务需要在搜索框中&#xff0c;模拟Ctrl F 的搜索功能&#xff0c;支持自选可搜索区域范围&#xff0c;且支持回车查看下一个&#xff0c;上下查看&#xff0c;自动滚动定位&#xff0c;…

OpenAI新作,直指DeepMind格局小了!大模型复杂推理应逐步验证

作者 | Python、Zenmoore 谷歌旗下的DeepMind&#xff0c;因AlphaGo而名声大振&#xff1b;而推出ChatGPT的OpenAI&#xff0c;近日更是如日中天。 然而&#xff0c;OpenAI公开了一篇论文[1]&#xff0c;结论同DeepMind去年11月的工作[2]完全相反。在对比差异时&#xff0c;论…

【AI】dragonGPT - 单机部署、极速便捷

dragonGPT 从数据私有化&#xff0c;到prompt向量库匹配&#xff0c;再到查询&#xff0c;一条龙服务&#xff0c;单机部署&#xff0c;极简操作 pre a.需要下载gpt4all model到本地. ggml Model Download Link 然后将存放model的地址写入.env MODEL_PATH your pathb.…

安卓系统远程控制电脑方法

要从安卓设备远程控制计算机&#xff0c;您可以使用专门为此目的设计的远程桌面软件或应用程序。 以下是使用安卓设备远程控制计算机的一般方法&#xff1a; 选择一个远程桌面应用程序&#xff1a;比如 Splashtop 远程控制软件。 在计算机上安装远程桌面软件&#xff1a;要实…

【map和set的封装】

文章目录 前言1 大致框架2 迭代器3 map和set的封装 前言 上篇博客已经讲解了红黑树插入的模拟实现&#xff0c;这篇文章的目的是利用上节课讲解的底层实现来封装map和set.参考代码借鉴的是STL SGI版本3.0 1 大致框架 首先我们来看看源码里面怎么定义的: 从源码中我们不难发现m…

什么是分布式事务?

什么是分布式事务&#xff1f; 分布式对应的是单体架构&#xff0c;互联网早起单体架构是非常流行的&#xff0c;好像是一个家族企业&#xff0c;大家在一个家里劳作&#xff0c;单体架构如下图&#xff1a; 但是随着业务的复杂度提高&#xff0c;大家族人手不够&#xff0c;…

Redis中的哈希结构(Dict)

前言 哈希结构是一个在计算机中非常常见的结构。哈希结构可以让我们在O(1)时间复杂度查找元素并且对其操作&#xff0c;并且增删改查性能并不会随着数据量的增多而改变。反而数据量的增大&#xff0c;会出现两个关键问题&#xff0c;一个是哈希冲突&#xff0c;另一个是rehash…

15、Spring框架

目录 什么是Spring Spring优点 Spring体系结构 Spring新特性 Spring的入门程序 新建立Maven项目 创建名为HelloSpring的类 新建applicationContext.xml文件 XML文件的约束信息配置 测试类TestHelloSpring 控制反转 依赖注入 依赖注入和控制反转的比较 依赖注入的…

虚拟机类加载机制

目录 1、概述 2、类加载的过程 1、过程总览 2、加载 3、链接-验证 4、链接-准备 5、链接-解析 6、初始化 7、总结 3、类加载的时机 4、类加载器 1、概述 2、类与类加载器 3、三层类加载器 4、双亲委派模型 5、其他加载策略 1、概述 一个Java类会被编译成一个Cl…