11谷粒商城Spring Cloud Alibaba gateway网关

网关gateway

  • 为什么要使用网关

(1)当每个微服务配置集群之后,会有多个端口,当其中一个服务挂掉之后,我们不想让前端去修改端口,所以使用配置中心之后,前端直接访问配置中心

有注册中心去选择访问哪个服务,当有服务挂掉之后,网关会实时的感知注册中心中的服务上线还是下线,可以将请求路由到其他健康的服务器

(2)每个服务被访问都需要被鉴权,我们不希望每个服务都写一遍鉴权的功能,所以我们可以通过使用网关帮助我们在访问服务之前进行鉴权的操作,而不是由服务直接处理

(3)网关作为流量的入口,可以实现路由转发,权限检验,限流控制等,而gateway作为SpringCloud退出的第二代网关框架,取代了zuul网关

(4)gateway每秒可以处理3万多的请求,Linked可以处理2万8千多请求,而zuul能处理2万多一点

(5)网关使用的是netty做的,具有非常好的网络性能

  • 原理

请求到达网关,网关利用断言,判断请求是否符合某个路由规则,如果符合就按照路由规则路由到指定的服务器,然后经过一系列的过滤器进行过滤

  • 使用网关的步骤
    • 创建网关模块
    • 引入common依赖,将自己注册到nacos中心,发现其他服务
    • 在启动类中加上@EnableDiscoveryClient注解,开启发现其他服务的功能,因为网关服务不需要数据库的配置,所以在启动类上排除和数据库相关的配置@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    • 在nacos中创建当前网关服务的命名空间,在配置列表的网关服务的命名空间下创建当前网关的配置
    • 添加注册中心的配置文件bootstrap.properties,指定当前服务,添加注册中心的地址,网关服务的命名空间,网关服务使用的配置分组
    • 在配置中心进行断言配置

  •  创建一个网关模块

  • 同样在pom中引入common依赖

网关也需要将自己注册到nacos中心,需要发现其他服务所在的位置

  • 网关服务启动类配置
/**
 * 1、开启服务注册发现
 *  (配置nacos的注册中心地址)
 * 2、编写网关配置文件
 */
@EnableDiscoveryClient
// 网关服务不需要数据库的配置,这里排除数据库的配置,不排除引入common依赖会报错
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class GulimallGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallGatewayApplication.class, args);
    }

}
  • 创建命名空间

  • 在网关命名空间的配置列表添加网关服务的配置

【注】项目在启动的时候会优先加载,注册中心的配置,而服务名.properties是默认的配置,如果Data Id是自定义的,则在bootstrap.properties中就得使用扩展配置,也就是xxx.ext-config[0]方式,否则没办法自动识别

  • 创建bootstrap.properties
#指定服务的名字
spring.application.name=gulimall-coupon
#指定注册中心的地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#指定使用那个配置中心命名空间
spring.cloud.nacos.config.namespace=37f52f46-d24e-453a-91d9-cb6769eb4569

spring.cloud.nacos.config.ext-config[0].data-id=spring.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
  • 在配置中心进行断言配置

spring:
  # 添加nacos注册中心的地址
  cloud:
    # 配置中心
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    # 网关   
    gateway:
      routes:
         # 每个路由都有唯一的id,访问百度的规则,其中“-”代表的是数组,可以有多个
        - id: test_route
          # 路由的地址
          uri: https://www.baidu.com
          # 断言(路由规则)
          predicates:
            # 键值方式,前面是键,“,”后面的是值:这个规则就是请求的uri包含baidu的就可以路由
            - Query=url,baidu
        # 每个路由都有唯一的id,访问qq的规则
        - id: qq_route
          uri: https://www.qq.com
          predicates:
           - Query=url,qq        
  #添加服务名称,否则在nacos的可视化界面上看不到
  application:
    name: gulimall-gateway
server:
  port: 12000
  • 使用断言路由到百度成功

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperLBY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值