zoukankan      html  css  js  c++  java
  • 使用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)
  • 相关阅读:
    Benelux Algorithm Programming Contest 2016 Preliminary K. Translators’ Dinner(思路)
    Benelux Algorithm Programming Contest 2016 Preliminary Target Practice
    Benelux Algorithm Programming Contest 2016 Preliminary I. Rock Band
    Benelux Algorithm Programming Contest 2016 Preliminary A. Block Game
    ICPC Northeastern European Regional Contest 2019 Apprentice Learning Trajectory
    ICPC Northeastern European Regional Contest 2019 Key Storage
    2018 ACM ICPC Asia Regional
    2018 ACM ICPC Asia Regional
    Mybatis入库出现异常后,如何捕捉异常
    优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止
  • 原文地址:https://www.cnblogs.com/wgslucky/p/11750133.html
Copyright © 2011-2022 走看看