# 《Seckill秒杀系统》第86章:秒杀系统整合业务网关

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:理解网关在业务系统中的应用场景,能够在系统中熟练接入业务网关,重点理解网关的路由原理,并能够将其灵活应用到自身实际项目中。

大家好,我是冰河~~

整合业务网关之后,客服端请求微服务时,就可以通过业务网关来统一转发请求了,也就是可以通过业务网关进行路由,将请求路由到正确的微服务上。并且后续可以在业务网关中实现鉴权、流控和风控等等一系列的功能。

# 一、前言

在前面的文章中,介绍了业务网关的基础知识和架构知识,并且对常见的业务网关进行了简单的介绍。在互联网项目中,一般都会引入网关,像秒杀系统这种瞬时高并发、大流量的场景来说,更需要引入网关来对流量进行管控,尽最大努力将无效流量挡在系统之外,保证系统的稳定性和可靠性。

# 二、本章诉求

秒杀系统整合业务网关,掌握系统引入网关的落地方案,并且对引入网关后的秒杀系统进行测试,最终能够在自身实际项目中灵活使用网关路由请求,将请求路由到正确的微服务中。

# 三、整合网关

这里,我们选择的业务网关是SpringCloud技术栈中的SpringCloud Gateway,秒杀系统整合业务网关的具体步骤如下所示。

(1)搭建网关工程

新建seckill-gateway网关工程,并在pom.xml文件中引入如下依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>

    <dependency>
        <groupId>io.binghe.seckill</groupId>
        <artifactId>seckill-common</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12

(2)配置SpringCloud Gateway

新建application.properties文件,并且在文件中新增如下配置。

#port
server.port=10001

#tomcat
server.tomcat.accept-count=6000
server.tomcat.threads.max=800
server.tomcat.threads.min-spare=100
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=E:/tomcat
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D

#spring application
spring.application.name=seckill-gateway
spring.main.web-application-type=reactive

#shardingsphere
spring.shardingsphere.enabled=false

#springcloud gateway
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-headers[0]="*"
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[0]="*"
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[0]="*"
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials=true

spring.cloud.gateway.routes[0].id=user-gateway
spring.cloud.gateway.routes[0].uri=http://localhost:8081
spring.cloud.gateway.routes[0].order=1
spring.cloud.gateway.routes[0].predicates[0]=Path=/seckill-user/**
spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1

spring.cloud.gateway.routes[1].id=activity-gateway
spring.cloud.gateway.routes[1].uri=http://localhost:8082
spring.cloud.gateway.routes[1].order=1
spring.cloud.gateway.routes[1].predicates[0]=Path=/seckill-activity/**
spring.cloud.gateway.routes[1].filters[0]=StripPrefix=1

spring.cloud.gateway.routes[2].id=goods-gateway
spring.cloud.gateway.routes[2].uri=http://localhost:8083
spring.cloud.gateway.routes[2].order=1
spring.cloud.gateway.routes[2].predicates[0]=Path=/seckill-goods/**
spring.cloud.gateway.routes[2].filters[0]=StripPrefix=1

spring.cloud.gateway.routes[3].id=order-gateway
spring.cloud.gateway.routes[3].uri=http://localhost:8084
spring.cloud.gateway.routes[3].order=1
spring.cloud.gateway.routes[3].predicates[0]=Path=/seckill-order/**
spring.cloud.gateway.routes[3].filters[0]=StripPrefix=1

spring.cloud.gateway.routes[4].id=stock-gateway
spring.cloud.gateway.routes[4].uri=http://localhost:8085
spring.cloud.gateway.routes[4].order=1
spring.cloud.gateway.routes[4].predicates[0]=Path=/seckill-stock/**
spring.cloud.gateway.routes[4].filters[0]=StripPrefix=1

spring.cloud.gateway.routes[5].id=reservation-gateway
spring.cloud.gateway.routes[5].uri=http://localhost:8086
spring.cloud.gateway.routes[5].order=1
spring.cloud.gateway.routes[5].predicates[0]=Path=/seckill-reservation/**
spring.cloud.gateway.routes[5].filters[0]=StripPrefix=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

重点来看下 spring.cloud.gateway 节点下的配置。

  • globalcors:此节点下的配置是为了解决SpringCloud Gateway跨域的问题。

  • routes:表示一个路由数组,可以在此节点下配置多个路由信息。

  • id:当前路由的唯一标识。

  • order:路由的优先级,数字越小表示优先级越高。

  • predicates:网关断言,也就是路由转发的条件,也是一个数组,可以配置多个路由转发条件。

  • Path:当客户端请求的路径满足Path的规则时,进行路由转发操作。

  • filters:网关过滤器,在过滤器中可以修改请求的参数和header信息,以及响应的结果和header信息,网关过滤器也是一个数组,可以配置多个过滤规则。

  • StripPrefix:网关在进行路由转发之前,会去掉1层访问路径。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码