一、需求描述

  旧项目做好之后,已经维护了一两个月,基本上已经趋于稳定,按照项目的整体进度基本上不会在做什么改动。新项目已经确定

下来,只是有一个大概的需求,unity3d的客户端已经开始做,在这个月23号之前会要求先出一个游戏的版本。目前相对来说不是太忙,

自己就考虑着开始搭建新项目的框架,首先考虑的就是先搭建网关服务。之前的项目由于工期非常短,并且非常急就没有把网关服务

给加进去,现在有时间了自己就想着第一个任务就是先添加网关服务,之后在根据需要在添加其他的服务。

二、需求分析

  自己的一个了解,网关服务可以做很多事情,比如实现所有访问请求的日志采集;身份认证,是否已经登录,是否有权限登录某个

系统;如果系统的访问量比较大的话,还可以做负载均衡;还可以做路由转发,根据不同的路由转发到对应的服务。好处这么多当然需要

使用一个网关服务来作为项目的统一入口,做各种事情。

三、技术选型

由于现在技术更新得特别快,比如springboot的版本一直在不断地进行更新,支持时间也在不断地压缩。

参考了很多资料,最终自己采纳选择2.3.x的springboot版本,springcloud和springcloudalibaba的版本如下,

<!-- 依赖的jar包所对应的版本 -->
<properties>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
<!--<spring-cloud-starter-alibaba-nacos-config.version>1.4.2</spring-cloud-starter-alibaba-nacos-config.version>-->

<!-- 编译插件 mvn compile -->
<maven-compiler-plugin.source>1.8</maven-compiler-plugin.source>
<maven-compiler-plugin.target>1.8</maven-compiler-plugin.target>
<maven-compiler-plugin.encoding>UTF-8</maven-compiler-plugin.encoding>

<!-- 是否跳过单元测试 解决中文乱码 -->
<maven-surefire-plugin.skipTests>true</maven-surefire-plugin.skipTests>
<maven-surefire-plugin.argLine>-Dfile.encoding=UTF-8</maven-surefire-plugin.argLine>
<mybatis-generator-maven-plugin.version>1.3.2</mybatis-generator-maven-plugin.version>
</properties>

<!-- 单个子项目特有的jar包 -->
<dependencyManagement>
<dependencies>
<!-- springcloud版本 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>

<!-- springcloud alibaba 版本 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>

</dependencyManagement>

版本选定好之后就开始搭建项目。由于自己之前一直在使用springcloudalibaba的nacos组件,因此新搭建的项目中继续使用这个组件。

主要用来做配置管理和服务发现。本篇博文需要有nacos使用基础的人才能理解。

首先搭建gateway网关项目,java代码很简单,就一个启动类,导入的maven配置如下:<dependencies>

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

<!-- lombok 仅限编译的时候使用 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>

<!-- nacos 配置管理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<!-- nacos 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>

nacos中的配置如下:
server.port=51309
#路由ID 唯一即可,就类似于数据表中的主键ID
spring.cloud.gateway.routes[0].id=motionBackend
#路由转发的地址 lb表示 以load balance 负载均衡的 方式 将讲求转发到 motionSpacebackend(项目名称) 这个项目中,解析之后是一个具体的地址
spring.cloud.gateway.routes[0].uri=lb://motionSpacebackend
#访问地址中包含的路径
spring.cloud.gateway.routes[0].predicates[0]=Path=/gateway/backend/**
#StripPrefix 表示去掉前缀 1 表示第一个前缀 即使是去除 访问地址中的 /gateway/ 前缀
spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1
 
bootstrap.properties的配置如下:

spring.application.name=motionSpaceGateway
spring.profiles.active=dev
#配置管理
spring.cloud.nacos.config.server-addr=127.0.0.1:24700
#spring.cloud.nacos.config.server-addr=192.168.1.2.5
#命名空间
spring.cloud.nacos.config.namespace=8760e76628114fceb7fc723b2da51c5c
#分组配置
spring.cloud.nacos.config.group=motionSpace
# 开启动态刷新
spring.cloud.nacos.config.refresh.enabled=true
#读取的配置文件后缀名
spring.cloud.nacos.config.file-extension=properties
#服务发现地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:24700
#spring.cloud.nacos.discovery.server-addr=192.168.1.2.5
 

由于刚开始搭建项目,只要请求能够转发即可,之后的一些功能会一步一步的进行添加。

做完这些工作后,启动项目,如下图

注意事项:springcloudgateway这个项目,不需要配置项目的根路径,如上图所示。它和其他springboot项目的启动方式还不太一样,其他

项目可以配置项目的根路径,在项目启动时也会添加进去。可是springcloudgateway 即使在配置中添加了项目根路径,启动时也不会加载。

上图显示的是Netty started on port,只需要配置一个端口即可。

之后是搭建一个后端主项目,导入的maven配置如下:

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

<!-- lombok 仅限编译的时候使用 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>

<!-- nacos 配置管理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<!-- nacos 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>

配置更加简单,一个端口和一个访问路径即可:

server.servlet.context-path=/backend
server.port=17303

bootstrap.properties的配置如下:

spring.application.name=motionSpacebackend
spring.profiles.active=dev
#配置管理
spring.cloud.nacos.config.server-addr=127.0.0.1:24700
#spring.cloud.nacos.config.server-addr=192.168.1.2.5
#命名空间
spring.cloud.nacos.config.namespace=8760e76628114fceb7fc723b2da51c5c
#分组配置
spring.cloud.nacos.config.group=motionSpace
# 开启动态刷新
spring.cloud.nacos.config.refresh.enabled=true
#读取的配置文件后缀名
spring.cloud.nacos.config.file-extension=properties
#服务发现地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:24700
#spring.cloud.nacos.discovery.server-addr=192.168.1.2.5

然后添加一个测试类

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {

/**
* @description:
* @author: dengyilang
* @date: 2022/1/7 17:40
* @return: void
*/
@RequestMapping(value = "/rout", method = RequestMethod.GET)
public String scanBind(){
log.info("backend路由测试---");
return "路由测试";
}
}

项目启动成功。

首先测试后端项目能否正常访问,访问的地址为 http://localhost:17303/backend/test/rout

测试结果正常。

然后测试使用网关服务进行转发是否正常,请求地址为 http://localhost:51309/gateway/backend/test/rout

测试结果正确。

请求的大致过程为 首先请求地址 http://localhost:51309/gateway/backend/test/rout 会到达 gateway项目的后台,

根据路由匹配规则,匹配到如下图中的路由,并且会截取掉第一个前缀/gateway/变为 http://localhost:51309/backend/test/rout

然后gateway项目将请求进行转发到下图的地址中,gateway项目在底层进行处理时,会将motionSpacebackend这个项目名称解析为

对应的地址和端口,在本地就解析为127.0.0.1:17303

转发后的请求就变为http://127.0.0.1:17303/backend/test/rout  最终正确地返回想要的结果。

到此一个简单的网关服务就搭建完成,之后在使用过程中遇到任何问题都会更新在本篇博客中。

参考博客

https://www.cnblogs.com/hellohero55/p/12723451.html

springCloudGateway-使用记录的更多相关文章

  1. Spring-Cloud-Gateway 从升级到放弃

    1 为什么要升级为spring-cloud-gateway? Spring Cloud Gateway features: Built on Spring Framework 5, Project R ...

  2. java getway springcloud 记录请求数据

    java getway springcloud 记录请求数据,兼容post请求无参数和response返回无参数 方式1 import com.icar.web.icarutils.util.Clie ...

  3. 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL

    在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...

  4. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  5. Kali对wifi的破解记录

    好记性不如烂笔头,记录一下. 我是在淘宝买的拓实N87,Kali可以识别,还行. 操作系统:Kali 开始吧. 查看一下网卡的接口.命令如下 airmon-ng 可以看出接口名称是wlan0mon. ...

  6. 2015 西雅图微软总部MVP峰会记录

    2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...

  7. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  8. 我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  9. 前端学HTTP之日志记录

    前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两 ...

  10. ASP.NET Core应用中如何记录和查看日志

    日志记录不仅对于我们开发的应用,还是对于ASP.NET Core框架功能都是一项非常重要的功能特性.我们知道ASP.NET Core使用的是一个极具扩展性的日志系统,该系统由Logger.Logger ...

随机推荐

  1. 【Services】【Web】【LVS】lvs基础概念

    1.简介 1.1. 作者:张文嵩,就职于阿里 1.2. LVS是基础四层路由.四层交换的软件,他根据请求报文的目标IP和目标PORT将其调度转发至后端的某主机: 1.3. IPTABLES的请求转发路 ...

  2. 【Word】自动化参考文献-交叉引用

    第一步:设置参考文献标号 开始-定义新编号格式中,定义参考文献式的方框编号: 这里注意不要把他原来的数字去掉 第二步:选择交叉引用 插入-交叉引用: 第三步:更新标号 如果更新标号,使用右键-更新域. ...

  3. 30个类手写Spring核心原理之MVC映射功能(4)

    本文节选自<Spring 5核心原理> 接下来我们来完成MVC模块的功能,应该不需要再做说明.Spring MVC的入口就是从DispatcherServlet开始的,而前面的章节中已完成 ...

  4. NSData NSDate NSString NSArray NSDictionary 相互转化

    //    NSData  NSDate NSString NSArray NSDictionary json NSString *string = @"hello word"; ...

  5. Shell if 参数含义列表

    [ -a FILE ]  如果 FILE 存在则为真.   [ -b FILE ]  如果 FILE 存在且是一个块特殊文件则为真.   [ -c FILE ]  如果 FILE 存在且是一个字特殊文 ...

  6. Office365与Office2016差异汇总

    以下很多链接来自原来的博客,如果有哪篇"被色情"的,请留言联系我,谢谢! 2020-8-29更新 通用 图片透明度:http://blog.sina.com.cn/s/blog_5 ...

  7. 大学MOOC课程视频下载、流文件合并、批量重命名、b站视频下载及学习课程视频推荐

    计算机行业技术更新快,编程语言种类多,在当今大数据和人工智能的时代,为了能在相关领域有所成就,就必须掌握好python.R等语言,较好的数学基础和深入的行业背景知识.计算机从业人员务必践行" ...

  8. Django 中间件理解

    中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 应用场景,对所有 ...

  9. word里搜狗输入法出不来,可以按ctrl+空格键

    word里搜狗输入法出不来,可以按ctrl+空格键

  10. Clusternet 成为首批通过工信部开源成熟度评估项目!!!

    Clusternet 作为首批项目参与了<信息技术 开源 开源项目评估模型参考架构>测评,并成为通过评估的四个项目之一.<信息技术 开源 开源项目评估模型参考架构>由国防科技大 ...