SpringCloud系列教程(七):服务网关Gateway

之前我们已经完成了微服务模块的调用,如果我们的项目有一个web页面,那么我们就要有一个统一的地址提供给前端,要不然一个个微服务的地址不仅很乱,而且也不安全,所以我们要把其中一个服务做成整体微服务的入口,这个服务就是Gateway。

随着现在项目的架构结构越来越复杂,Gateway也承担起来很多工作,比如对http请求的验证,在网关层做校验就非常的方便,同时我们也要注意,网关层的响应一定要足够的快,否则它会拖垮整个微服务集群。

1、修改一下nacos-client-demo的接口context,便于我们使用网关,之前的接口url太简单了。

2、修改application.yml,给项目url统一加一层context。

server:
  servlet:
    context-path: /${spring.application.name}

3、修改ApiController,在路径上加一层/api

@RequestMapping("/api")

4、这样我们的nacos-client-demo的访问地址就变成了:http://127.0.0.1:8080/nacos-client-demo/api/** ,比如:http://127.0.0.1:8080/nacos-client-demo/api/call

5、新建一个服务gateway-demo,加入nacos依赖,让它也成为nacos注册服务的一员,同时添加SpringCloud的gateway依赖。

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

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

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

6、添加application.yml文件,配置nacos信息,并且配置好gateway对nacos-client-demo的api地址代理。

spring:
  main:
    # gateway组件中的spring-boot-starter-webflux和springboot作为web项目启动必不可少的spring-boot-starter-web出现冲突
    web-application-type: reactive
  application:
    name: gateway-demo
  cloud:
    nacos:
      server-addr: 192.168.3.54:80
      username: nacos
      password: nacos
      discovery:
        group: devops
        namespace: sit
      config:
        namespace: sit
        group: devops
    gateway:
      routes:
        - id: nacos-client-demo #指定服务名
          uri: lb://nacos-client-demo #去注册中心找这个服务名
          predicates: #断言,匹配访问的路径
            - Path=/nacos-client-demo/api/**    #服务访问路径
  config:
    import: nacos:${spring.application.name}?refresh=true
server:
  port: 8888

这里注意,我们SpringCloud Gateway使用的webflux和Springboot中的web是冲突的,要加一个配置spring.main.web-application-type=reactive或者移除spring-boot-starter-web依赖,因为我在最外层的pom里加了spring-boot-starter-web,所以我们要配置spring.main.web-application-type=reactive,大家的项目可以在各个module里加spring-boot-starter-web依赖。

配置uri是指向了nacos里获取服务,这就有点类似于openfeign去获取nacos中的服务的意思,所以配置依赖的时候加入了spring-cloud-starter-loadbalancer,不加会报503。

predicates是配置就是咱们刚才ApiController中的那个/api。

StripPrefix=1代表请求网关的时候,它会自动去掉第一层的context,就是咱们之前在nacos-client-demo的application.yml中加的那个context-path。

7、启动两个服务,这时候nacos-client-cemo地址为:http://127.0.0.1:8080/nacos-client-demo/api/call

通过网关访问地址为:http://127.0.0.1:8888/nacos-client-demo/api/call

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值