服务网关gateway

一、为什么要使用网关

思考一下程序可以直接这样架构吗?
在这里插入图片描述
这样架构带来的问题:

  • 认证复杂,假设所有接口都需要认证才能访问
  • 导致客户端难以重构:请求地址可能随时改变
  • 无法使用浏览器不友好的协议:后台协议浏览器不知道,前端没有转化的过程
    在这里插入图片描述
    问题解决:
  • 认证复杂:统一认证
  • 导致客户端难以重构:统一端口
  • 无法使用浏览器不友好的协议:服务里面使用什么协议用网关转化成http协议,隔离开了

二、什么使Spring Cloud Gateway

  • SpringCloud的网关(第二代):未来将取代Zuul(第一代)
  • 基于Netty、Reactor以及WebFlux构建

三、SpringCloud Gateway的优点

  • 性能强劲,性能使第一代网关Zuul1.x的1.6倍
  • 功能强大,内置流量很多的实用功能,比如转发、监控、限流等
  • 设计优雅易拓展

四、SpringCloud Gateway缺点

  • 依赖Netty和WebFlux,不是Servlet编程模型,有一定的适应成本
  • 不能再Servlet容器下工作们也不能构成war包
  • 不支持SpringBoot1.x

五、编写SpringCloud Gateway代码

1. 创建一个SpringBoot项目
2. 加入如下依赖:
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
        <version>2.2.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>
</dependencies>
3. 创建SpringBoot项目的启动类和配置文件
server:
  port: 9000
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          # 让网关服务去注册中心寻找其他服务
          enabled: true
4. 配置文件中加入如下配置:
@SpringBootApplication
public class GatewayApplication {

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

}
5.情动Gateway项目通过网关的方式访问

在这里插入图片描述
例如:get请求:http://localhost:网关端口号/访问服务名/访问方法/参数

6.Gateway的核心概念
  • Route(路由):SpringCloud Gateway的基础元素,可以简单理解成一条转发的规则
    包含:ID、目标URL、Predicate集合以及Filter集合。
  • Predicate(谓词):即java.util.function.Predicate,SpringCloud Gateway使用Predicate实现路由的匹配条件。
  • Filter(过滤器):类似于Javaweb的过滤器(拦截器),用来修改请求和响应。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值