Gateway初识

发布时间 2023-09-20 19:36:35作者: Kreutze

为什么需要网关

  微服务直接让任何人访问不太安全,要对用户的身份进行验证。

网关功能:

  1.身份认证和权限校验

  2.判断服务的路由、负载均衡

  3.请求的限流

网关的技术实现:  

  在SpringCould中网关的实现包括两种:

    - gateway 

    - zuul

  zuul是基于Servlet的实现,属于阻塞式编程(程序在执行一个任务的时候会被暂停,直到该任务完成)。

  gateway是基于Spring5中提供的WebFlux,属于响应式编程,具有更好的性能。(响应式编程:通过观察和响应数据或事件的变化,来实现实时、即时地处理和更新的一种编程方式。 eg:监听鼠标点击)

 

快速入门

搭建网关服务步骤:

  1.创建新的module,引入SpringCouldGateway的依赖和nacos的服务依赖:

        <!--nacos服务注册发现依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--网关依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>    

  main函数

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

  2.编写路由配置及nacos地址

    断言:表示为一些布尔表达

server:
  port: 10010 #网关端口
spring:
  application:
    name: gateway #服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos地址 
    gateway:
      routes: #网关路由配置
       - id: user-service #路由id,自定义,只要唯一即可
         # uri: http://127.0.0.1:8081 #路由的目标地址 http就是秃顶地址
         uri: lb://userservice #路由的目标地址 lb就是负载均衡,后面跟服务名称
         predicates: #路由断言,也就是判断请求是否符合路由规则的条件
      - path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求

  然后发现这样配置会像下面这样 

           

  然后查了一下,发现gateway和userservice不在一个namespace里

  再补一张路由规则判断