使用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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM