使用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-boot-starter-web,要不然会报错。
做为网关,它的首要职责就是对请求的转发和负载。但是网关如何知道有哪些服务需要它负责管理呢?为了解决这个问题,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)
posted @ 2019-10-28 01:49  王广帅  阅读(1323)  评论(0编辑  收藏  举报