Spring Cloud Alibaba系列三:集成Gateway实现路由管理

news2024/11/18 2:28:05

文章目录

    • Spring Cloud Alibaba系列三:集成Gateway实现路由管理
      • 前言
      • 1、改造父项目 pom 文件
      • 2、创建 gateway 子 module
      • 3、配置yml文件

Spring Cloud Alibaba系列三:集成Gateway实现路由管理

spring cloud alibaba 版本对照

spring cloud alibaba 有严格的版本要求,所以一定要选对 spring cloud 版本,以及 spring boot 的版本

此系列文章的版本选取如下:

  • Spring Cloud 版本:Spring Cloud 2021.0.1
  • Spring Boot 版本:2.6.3
  • Spring Cloud Alibaba 版本:2021.0.1.0

Spring Cloud Alibaba系列一:nacos 注册中心

Spring Cloud Alibaba系列二:openFeign 实现服务间的通信

Spring Cloud Alibaba系列三:集成Gateway实现路由管理

前言

前两篇整合了nacos做为注册中心,openFeign实现服务间的通信,这篇记录整合Gateway做为整个路由的管理。

那么什么是Gateway

网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同层–应用层。

Gateway能用来干什么?

常见的作用有:

  1. 鉴权校验:验证是否认证和授权
  2. 统一入口:提供所有微服务的入口点,起到隔离作用,保障服务的安全性
  3. 限流熔断
  4. 路由转发
  5. 负载均衡
  6. 链路追踪

1、改造父项目 pom 文件

由于引入了Gateway,所以我们要把父项目的 pom文件里的 spring-boot-starter-web 的依赖删掉,一次在 customerprovider模块的pom文件里引入该依赖。否则启动 gateway 模块会报错。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、创建 gateway 子 module

创建方式同创建其他两个module一样。创建完成之后修改该模块的 pom 文件。需要注意的是,由于common模块引入了mybatis-plus的依赖,所以在gateway的pom文件里如果要添加common模块的依赖,需要移除掉mybatis-plus,否则启动会报DataSource异常。

pom.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>alibaba</artifactId>
        <groupId>cn.xzf</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>gateway</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gateway</name>

    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>cn.xzf</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--gateway依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!-- Feign Client for loadBalancing -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

另外一个要注意的是,如果在 yml 的配置文件里,配置 routes.uri 为 lb:// 的形式,需要加上loadbalance的依赖,否则启动访问,会 503

<!-- Feign Client for loadBalancing -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

原因如下:

由于从springcloud2020版本开始,弃用了Ribbon,因此Alibaba在2021及之后版本的 nacos 中删除了 Ribbonjar 包,因此无法通过 loadbalancer 路由到指定微服务。

3、配置yml文件

dev 的配置文件内容如下

url:
  base-url: 192.168.2.213

spring:
  cloud:
    nacos:
      discovery:
        #注册中心地址
        server-addr: ${url.base-url}
        username: nacos
        password: nacos
      config:
        #命名空间
        namespace: ${spring.profiles.active}
        file-extension: yaml
        #配置中心地址
        server-addr: ${url.base-url}
    gateway:
      routes:
        - id: provider
          uri: lb://provider
          predicates:
            - Path=/provider/**
          # 过滤器
          filters:
#            - StripPrefix=1 #转发之前去掉第一层路由
        - id: customer
          uri: lb://customer
          predicates:
            - Path=/customer/**
          # 过滤器
          filters:
#            - StripPrefix=1 #转发之前去掉第一层路由
  • routes:配置路由相关的内容
  • id:保持唯一即可
  • uri:可以是http://的形式,也可以是 lb://服务名称(lb://provider)。lb 指使用负载均衡的模式调用对应的服务
  • predicates:路由断言,判断那些url会转发到对应的服务去
  • filters:过滤器,对请求或响应做处理。

更多的配置可以参考 网关GateWay的使用详解、路由、过滤器、跨域配置

上述做完之后,就可以浏览器测试看看了。gateway 服务配置的端口号是8084
在这里插入图片描述
依次启动 gatewayprovidercustomer 服务。
浏览器访问

1、http://localhost:8082/provider/demo/test
在这里插入图片描述

2、http://localhost:8084/customer/demo/test

在这里插入图片描述
3、http://localhost:8084/provider/demo/test

在这里插入图片描述
8082 是正常访问 provider 服务的接口,8084 是 gateway 服务的端口,分别访问customerprovider的接口,返现都正确访问到了,自此集成gateway结束了。

实际上gateway还有更多的作用,这里只是简单的路由功能,而且路由功能里还可以传参数等操作,更多的功能值得你去挖掘。

上述就是 集成gateway的快速过程。

SpringCloudAlibaba系列demo (github.com)

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

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

相关文章

【MPP数据库】TiDB表分区探索与实践

方案背景——为什么要进行分区&#xff1f; 一是老板通Tidb集群每天涉及50张表、2亿多条数据回流&#xff0c;合理使用Hash可以把写入压力打散到不同的TiKV&#xff1b; 二是对于大集团数据做聚合&#xff0c;利用分区裁剪原理&#xff0c;查询时可以充当前置索引&#xff0c…

1月第4周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年1月23日-1月29日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B…

卫星地图——MAP(c++)

卫星地图 题目描述 一张矩形的卫星地图&#xff0c;有M行N列。行列中的0表示空地&#xff0c;1表示有建筑。有3种类型的建筑: L型: 仅在一行上占据连续的若干个格子&#xff0c;长度至少为2&#xff0c;至多为N C型&#xff1a;仅在一列上占据连续的若干个格子&#xff0c;…

春节机票销售大增!航空领域哪些业务风险要注意?

目录 航空领域常见的业务风险 2022年航空业务风险趋势分析 航空领域业务风险欺诈分析 如何防范航空业务风险 针对恶意网络爬虫 针对仿冒登录与内控风险 安全技术 春节旅游与出行数据陆续出炉。中国民航局数据显示&#xff0c;2023年1月21日至27日&#xff08;农历除夕至…

Linux - Linux系统

一、Linux系统Linux&#xff0c;全称GNU/Linux。Linux是一个开源、免费的操作系统&#xff0c;其稳定性、安全性、处理多并发能力已经得到业界的认可&#xff0c;目前大多数企业级应用甚至是集群项目都部署运行在linux操作系统之上&#xff0c;很多软件公司考虑到开发成本都首选…

CnOpenData中国核酸检测机构及采样点数据

一、数据简介 2020年1月21日&#xff0c;国家卫健委发布1号公告&#xff0c;将新型冠状病毒感染的肺炎纳入《中华人民共和国传染病防治法》规定的乙类传染病&#xff0c;并采取甲类传染病的预防、控制措施。目前&#xff0c;新型冠状病毒肺炎防控仍处于关键阶段&#xff0c;核酸…

ThinkPHP6 文件上传

内置文件上传使用\think\facade\Filesystem类封装方法 目录 简单上传 public存储文件 文件验证 命名规则 使用sha1 使用MD5 使用date 指定文件名称 自定义命名规则 更多上传设置 总结 简单上传 直接上传&#xff0c;使用默认上传设置 $savename \think\facade\F…

业务平台扩展支持TDengine时序数据库方案

1 场景与架构 1.1业务架构 这里涉及项目隐私&#xff0c;架构图不方便公开。 大致情况就是&#xff1a; 应用层的园区畅行、生态宜居、安全守护是我方要交付的系统。 平台层的物联网感知中台是我方平台。 1.2数据架构 从数据架构看&#xff0c;园区畅行…

第四章 git分支操作

4.1什么是分支 在版本控制过程中&#xff0c;同时推进多个任务&#xff0c;为每个任务&#xff0c;我们就可以创建每个任务的单独 分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来&#xff0c;开发自己分支的时 候&#xff0c;不会影响主线分支的运行。对于初…

优化器-RBO 的规则转化

一、RBO 背景介绍RBO&#xff08;Rule-Based Optimization&#xff0c;基于规则的优化器&#xff09;有着一套严格的使用规则&#xff0c;按照 RBO 去写 SQL 语句&#xff0c;无论数据表中的内容怎样&#xff0c;也不会影响到你的“执行计划”。换言之 RBO 对数据不“敏感”&am…

码元,码元速率,波特率,比特率(个人理解总结)

参考&#xff1a;https://baike.baidu.com/item/%E7%A0%81%E5%85%83%E4%BC%A0%E8%BE%93%E9%80%9F%E7%8E%87/6305673 https://baike.baidu.com/item/%E7%A0%81%E5%85%83%E9%80%9F%E7%8E%87/10945076 https://baike.baidu.com/item/%E6%9B%BC%E5%BD%BB%E6%96%AF%E7%89%B9%E7%BC%9…

低代码:如何成为企业业务价值提升的一大利器?

首先&#xff0c;来看低代码能为企业带来什么&#xff1f; 低代码开发能够增加软件所创造的价值&#xff0c;帮助企业机构衡量企业级低代码平台的价值并计算它将会产生的影响。 低代码在企业的现实运用中能为企业带来巨大的经济效益。众所周知&#xff0c;软件可以推动业务价值…

Cesium中的飞线效果-Shader

飞线的顶点着色器坐标系换算较为复杂。代码中的vertexShaderSource部分为cesium源码中附带的顶点着色器。后期增加了一些传参方法。 用到的GLSL的API: attribute vec2 st; 两个分量为 st.s: 飞线的长度(0-1) st.t: 飞线的宽度(0~1) czm_frameNumber 每帧都会自增,用…

metersphere将默认关闭加载的UI服务启动

目录 一、安装 二、配置 selenium-grid 三、下载驱动程序 三、运行驱动程序 四、将本地运行Selenium-server配置到MeterSphere平台 一、安装 /opt/metersphere/.env&#xff0c;有个 ui_enabled属性&#xff0c;改成true, 然后 msctl reload 二、配置 selenium-grid 这里…

pytest自动化测试执行环境切换的两种解决方案

一、痛点分析 在实际企业的项目中&#xff0c;自动化测试的代码往往需要在不同的环境中进行切换&#xff0c;比如多套测试环境、预上线环境、UAT环境、线上环境等等&#xff0c;并且在DevOps理念中&#xff0c;往往自动化都会与Jenkins进行CI/CD&#xff0c;不论是定时执行策略…

硬盘已删除的数据怎么恢复?磁盘数据恢复,试试这3大方法!

电脑里面的硬盘起着存储安装程序或者保存着重要数据的功能&#xff0c;里面有我们很多数据&#xff0c;比如图片、文件、视频等。 有时遇到一些情况&#xff0c;我们把硬盘里面的重要数据删除了&#xff0c;或者是硬盘被损坏了&#xff0c;我们该怎么办&#xff1f;磁盘数据恢…

基于声学模型共享的零资源韩语识别系统

声学模型共享方法是极低资源小语种语音识别一种解决方案&#xff0c;能够实现不需要任何语音数据的语音识别。本文介绍清华大学语音与音频技术实验室的零资源韩语语音系统&#xff0c;其在不使用任何韩语语音数据的情况下&#xff0c;在Zeroth韩语数据集上的测试CER达到了27.33…

Redis主从架构 | 黑马Redis高级篇

目录 一、搭建主从架构 1、为什么要搭建 2、准备实例和配置 3、启动 4、开启主从关系 二、 数据同步原理 1、全量同步 2、命令传播 3、增量同步 三、常见面试题 一、搭建主从架构 1、为什么要搭建 如果服务器发生了宕机&#xff0c;由于数据恢复是需要点时间&#…

51.Isaac教程--使用强化学习的DollyDocking

使用强化学习的DollyDocking ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录使用强化学习的DollyDocking快速开始推理未来场景工厂多代理场景训练利用训练的模型运行推理Codelets模拟Isaac SDK 中的健身房状态机流程强化学习政策JSON 管…

Jenkins+GitLab自动化部署到Docker容器

JenkinsGitLab自动化部署到Docker容器1、编写Dockerfile2、为测试服务器配置Docker镜像加速器3、Jenkins相关配置3.1 配置测试服务器3.2 Pre Steps配置3.3 Post Steps配置3.4 执行构建本文是对JenkinsGitMaven自动化部署配置这篇文章的补充&#xff0c;有关基本的环境搭建从这篇…