使用Spring Cloud Gateway搭建游戏服务网关(1)
在游戏服务器构架中,Web服务是其中重要的部分之一,像获取公告,游戏区列表,账号登陆与注册,礼包码的使用充值等,这些都可以使用Web服务实现,快捷又方便扩展,通过简单的配置就可以以集群的方式提供服务。 在架构设计中,最重要的一个概念就是架构必须有足够的扩展性,可以随着业务量的增加,可以通加增加服务器的数量来提升服务能力,以适应业务的增涨。
比如初始的构架部署是这样的:
再过段时间,随着业务的增涨,架构的部署是这样的:
最后会进化为终极的部署方式,这种方式就是传说的的微服务架构,是这样的:
这是根据业务发展,服务器架构在不同的阶段的相应的部署方式,各有自己的优缺点,但都是适应那个阶段的需求的。所以在构架设计的时候,要预料到最终极的部署方式,前期可以不用实现这么复杂的功能,但是一定要为将来实现这些复杂的功能预留好扩展接口。
在目前开源的框架中,Spring Cloud 为微服务的开发提供了一套比较成熟的方案。完全适应服务的动态伸缩需求。初级架构就不用说了,基本上刚开始都是以这种方式进行开发的,在这里,为了服务的扩展,可以采用Spring Boot开发单体服务,后期需要扩展为多服务时,只需要添加Spring Cloud Gateway网关即可。
下面我们来简单配置一下Spring Cloud Gateway的网关开发。这里使用Maven管理项目,在项目中添加group为org.springframework.cloud和artifact id为spring-cloud-starter-gateway的starter。如下面的Maven依赖所示:
<!-- 配置Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<!-- 配置Spring Clound 依赖管理 --><br> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version><!--注意这里面的版本,不同的版本,代码会有一些差别 -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<!-- 去掉Spring boot默认的日志,使用下面配置的log4j2 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!-- 引入log4j2的日志框架 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<!--引入spring cloud gateway-->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
注意,Spring Cloud Gateway需要Spring Boot和Spring Webflux提供的Netty的运行时环境,因此,它不可以打包成war包,也不可以在传统的Servlet容器(比如tomcat)中运行。所以Spring Cloud Gateway项目中不能依赖
做为网关,它的首要职责就是对请求的转发和负载。但是网关如何知道有哪些服务需要它负责管理呢?为了解决这个问题,Spring Cloud提供了一个叫服务注册中心的服务,比较常用的有Consul,Alibaba的Nacos。它负责服务端的服务治理,包括服务注册,服务发现,服务移除等。这里我们先使用Consul做为服务治理服务。
可以从官网下载Consul,然后使用这个命令运行(在consul所在目录运行):
- mac或Linux命令:
./consul agent -http-port=7777 -dev -server -ui
- win 命令:.\consul.exe agent -dev -http-port=7777 -ui -server -data-dir=./data
我们先不纠结Consul的具体用法,这个以后再具体的说,或有兴趣的先去查一下官方的文档即可。在Spring Cloud Gateway中要从Consul中获取所有的注册服务,所以需要再添加一个服务发现的客户端依赖
<dependency><!-- 引入Consul客户端,用于服务发现 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
然后添加application.yml配置 文件,如下所示:
logging:
config: classpath:log4j2.xml
server:
port: 8080
application:
name: gateway-server
cloud:
consul:
host: localhost
port: 7777
discovery:
prefer-ip-address: true
ip-address: 127.0.0.1
register: false # 网关不需要被其它服务发现,不需要向服务中心注册
gateway:
discovery:
locator:
enabled: true
欧莱雅男士锐能抗初老护肤套装(元气露+多效霜+眼霜+洁面膏50ml2+面膜10) 视黄醇紧致 洗面奶男
在启动网关服务的时候,需要先启动Consul服务。这样就简单的网关服务就搭建成功了。下回我们接着再添加网关后面的服务,使用网关实现请求的转发。
可以从这里下载源:https://gitee.com/wgslucky/SpringCloud,需要将application.yml中的active修改为auto,让服务在启动的时候,加载application-auto.yml配置文件。
关注左上角公众号,了解更多信息 ![](https://img2018.cnblogs.com/blog/562410/201910/562410-20191028014837476-265913234.jpg)