springCloudGateway-使用记录

简介: springCloudGateway-使用记录一、需求描述旧项目做好之后,已经维护了一两个月,基本上已经趋于稳定,按照项目的整体进度基本上不会在做什么改动。新项目已经确定下来,只是有一个大概的需求,unity3d的客户端已经开始做,在这个月23号之前会要求先出一个游戏的版本。目前相对来说不是太忙,自己就考虑着开始搭建新项目的框架,首先考虑的就是先搭建网关服务。之前的项目由于工期非常短,并且非常急就没有把网关服务给加进去,现在有时间了自己就想着第一个任务就是先添加网关服务,之后在根据需要在添加其他的服务。

springCloudGateway-使用记录

springyouhuiquan.jpg

一、需求描述

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

下来,只是有一个大概的需求,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

转载地址https://www.cnblogs.com/yilangcode/p/15777129.html

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3天前
|
监控 安全 Java
Spring cloud原理详解
Spring cloud原理详解
14 0
|
7天前
|
消息中间件 负载均衡 Java
【Spring Cloud 初探幽】
【Spring Cloud 初探幽】
14 1
|
9天前
|
Java 开发者 微服务
Spring Cloud原理详解
【5月更文挑战第4天】Spring Cloud是Spring生态系统中的微服务框架,包含配置管理、服务发现、断路器、API网关等工具,简化分布式系统开发。核心组件如Eureka(服务发现)、Config Server(配置中心)、Ribbon(负载均衡)、Hystrix(断路器)、Zuul(API网关)等。本文讨论了Spring Cloud的基本概念、核心组件、常见问题及解决策略,并提供代码示例,帮助开发者更好地理解和实践微服务架构。此外,还涵盖了服务通信方式、安全性、性能优化、自动化部署、服务网格和无服务器架构的融合等话题,揭示了微服务架构的未来趋势。
32 6
|
13天前
|
JSON Java Apache
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
|
13天前
|
负载均衡 Java 开发者
Spring Cloud:一文读懂其原理与架构
Spring Cloud 是一套微服务解决方案,它整合了Netflix公司的多个开源框架,简化了分布式系统开发。Spring Cloud 提供了服务注册与发现、配置中心、消息总线、负载均衡、熔断机制等工具,让开发者可以快速地构建一些常见的微服务架构。
|
15天前
|
消息中间件 Java RocketMQ
Spring Cloud RocketMQ:构建可靠消息驱动的微服务架构
【4月更文挑战第28天】消息队列在微服务架构中扮演着至关重要的角色,能够实现服务之间的解耦、异步通信以及数据分发。Spring Cloud RocketMQ作为Apache RocketMQ的Spring Cloud集成,为微服务架构提供了可靠的消息传输机制。
28 1
|
15天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo: 微服务通信的高效解决方案
【4月更文挑战第28天】在微服务架构的发展中,服务间的高效通信至关重要。Spring Cloud Dubbo 提供了一种基于 RPC 的通信方式,使得服务间的调用就像本地方法调用一样简单。本篇博客将探讨 Spring Cloud Dubbo 的核心概念,并通过具体实例展示其在项目中的实战应用。
15 2
|
15天前
|
监控 Java Sentinel
Spring Cloud Sentinel:概念与实战应用
【4月更文挑战第28天】在分布式微服务架构中,确保系统的稳定性和可靠性至关重要。Spring Cloud Sentinel 为微服务提供流量控制、熔断降级和系统负载保护,有效预防服务雪崩。本篇博客深入探讨 Spring Cloud Sentinel 的核心概念,并通过实际案例展示其在项目中的应用。
24 0
|
15天前
|
Cloud Native Java Nacos
Spring Cloud Nacos:概念与实战应用
【4月更文挑战第28天】Spring Cloud Nacos 是一个基于 Spring Cloud 构建的服务发现和配置管理工具,适用于微服务架构。Nacos 提供了动态服务发现、服务配置、服务元数据及流量管理等功能,帮助开发者构建云原生应用。
21 0