IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springcloud之gateway服务网关 -> 正文阅读

[Java知识库]springcloud之gateway服务网关

微服务中网关的作用

  • 统一入口:为全部微服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性
  • 鉴权校验:识别每个请求的权限,拒绝不符合要求的请求
  • 动态路由:动态的将请求路由到不同的后端集群中
  • 减少客户端与服务端的耦合:服务可以独立发展,通过网关层来做映射

在这里插入图片描述

gatewayzuul

  • gatewayspringcloud 微服务平台的一个子项目,属于 spring 开源社区,依赖名叫:spring-cloud-starter-gateway。官网:https://spring.io/projects/spring-cloud-gateway
  • zuulnetflix 公司的开源项目,springcloudnetflix 项目中也已经集成了 zuul,依赖名叫:spring-cloud-starter-netflix-zuul。官网:https://github.com/Netflix/zuul
  • springcloud gateway 基于 spring 5、projec treactor、springboot 2,使用非阻塞式的 API,内置限流过滤器,支持长连接(比如 websockets),在高并发和后端服务响应慢的场景下比 zuul 1 的表现要好
  • zuul 基于 servlet2.x 构建,使用阻塞的 API,没有内置限流过滤器,不支持长连接

springcloud gateway 简介

  • springcloud gatewayspringcloud 的一个全新项目,该项目是基于 spring 5.0,springboot 2.0Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式
  • springcloud gateway 作为 springcloud 生态系统中的网关,目标是替代 netflix zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流

相关概念

  • Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配
  • Predicate(断言):这是一个 Java 8Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 Http 请求的任何内容,例如 headers 或参数
  • Filter(过滤器):这是 org.springframework.cloud.gateway.filter.GatewayFilter 的实例,我们可以使用它修改请求和响应

工作流程

在这里插入图片描述
客户端向 SpringCloud Gateway 发出请求。如果 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web HandlerHandler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。 过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(pre)或之后(post)执行业务逻辑

特征

  • 基于 Spring 5,Project ReactorSpringBoot 2.0
  • 动态路由
  • PredicatesFilters 作用于特定路由
  • 集成 Hystrix
  • 集成 SpringCloud 注册中心
  • 易于编写的 PredicatesFilters
  • 限流
  • 路径重写

快速上手

继续依赖 上一篇 文章的项目结构,再新建服务网关项目如下

在这里插入图片描述

Maven 依赖

eureka-client-gateway 服务网关添加依赖如下

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

application.properties 配置文件

eureka-client-gateway 服务网关的配置文件

server.port=9000

spring.application.name=eureka-client-gateway

#我们自定义的路由ID,保持唯一
spring.cloud.gateway.routes[0].id=eureka-client-gateway
#目标,要路由的服务地址
spring.cloud.gateway.routes[0].uri=http://localhost:8080
#路由条件
spring.cloud.gateway.routes[0].predicates[0]=Path=/user/**
  • id:我们自定义的路由 ID,保持唯一
  • uri:目标,要路由的服务地址。在这里路由的是 eureka-client-producer 提供方地址
  • predicates:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果
  • filters:过滤规则,本示例暂时没用
  • /user/**:以 user 开头的接口 url,后面 * 是通配符

上面这段配置的意思是:配置了一个 ideureka-client-gateway 的路由规则,当访问地址 http://localhost:9000/user/** 时会自动转发路由到地址 http://localhost:8080/user/**

启动类

eureka-client-gateway 服务网关的启动类

@Slf4j
@SpringBootApplication
public class AppGateway {

    public static void main(String[] args) {
        SpringApplication.run(AppGateway.class, args);
        log.info("------AppGateway Running------");
    }
}

eureka-client-producercontroller

它的端口是 8080

@Slf4j
@Controller
@RequestMapping(path = "/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping(path = "/selectUserById")
    @ResponseBody
    public ResultVo selectUserById(Integer id) {
        return userService.selectOne(id);
    }
}

测试

分别启动项目 eureka-client-gatewayeureka-client-producer(不需要启动 eureka 服务端以及 config 服务端),访问接口 http://localhost:9000/user/selectUserById?id=1,如下

在这里插入图片描述
说明 gateway 服务网关已经路由成功。在看看接口 http://localhost:8080/user/selectUserById?id=1,也就是被路由转发的原服务地址的返回结果如下

在这里插入图片描述

gateway 网关路由的配置方式

  • 在配置文件 propertiesyml 中配置(如上)
  • 通过 @Bean 自定义 RouteLocator,在启动主类 Application 中配置(如下)
@SpringBootApplication
public class GateWayApplication {

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

	@Bean
	public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
		return builder.routes()
				.route("path_route", r -> r.path("/about")
						.uri("http://ityouknow.com"))
				.build();
	}
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:27:07  更:2021-11-12 19:27:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:52:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码