【SpringCloud】微服务技术栈入门3 - Gateway快速上手
目录
- Gateway
- WebFlux
- 网关基本配置
- 过滤器与断言工厂
- 全局过滤器
- 跨域处理 CORS
Gateway
WebFlux
gateway 基于 webflux 构建
WebFlux 是基于反应式流概念的响应式编程框架,用于构建异步非阻塞的 Web 应用程序。它支持响应式编程范式,并提供了一种响应式的方式来处理 Web 请求。
与传统的 Servlet API 相比,WebFlux 采用了基于事件驱动的编程模型,不依赖于传统的线程池模型。它使用少量的线程来处理大量的请求,通过异步非阻塞的方式实现高吞吐量和低延迟。
WebFlux 提供了两种编程模型:
- 响应式 Web 客户端:用于发送 HTTP 请求并处理响应。它基于 Reactor 提供了一组操作符和方法,可以以声明式的方式组装和处理 HTTP 请求,支持异步和流式处理。
- 响应式 Web 服务器:提供了一个响应式的 Web 服务器,用于处理传入的 HTTP 请求并生成响应。它基于 Reactor 提供了一组用于处理请求和生成响应的 API,支持异步非阻塞的处理方式。可以使用注解或函数式编程的方式定义请求处理器,处理器可以返回一个单独的响应,也可以返回一个表示响应流的 Publisher 对象。
网关基本配置
Gateway 是一个在系统架构中充当入口点的服务器,它接收来自客户端的请求并将其转发到后端的服务。网关的作用是在客户端和后端服务之间建立一个中间层,用于路由请求等
新建 maven 项目 gateway
pom 添加 gateway 坐标以及负载均衡坐标
<!--gateway网关依赖-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency><!--loadbalancer负载均衡,对于高版本springboot需要额外添加此以来-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
编写入口文件 GatewayApplication.java
@SpringBootApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}
}
进行网关配置
routes 用于设置转发路由,他是一个数组,表示你可以设置多个转发规则,但是各个转发规则的 id 不可以重复
server:port: 2333spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848# 配置gatewaygateway:# 数组方式配置路由转发routes:# 转发id,名字随便取,但是不可以重复- id: user-service# 被转发的URI,格式:lb://<被转发的服务器名>uri: lb://userservice# 断言规则predicates:# 当请求路径是 /user/** 格式的,自动转发到指定服务器- Path=/user/**# 这是另一组被转发的服务器- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**
过滤器与断言工厂
predicates 断言配置属性可以使用以下 11 种
使用 filters 添加过滤器
下面为每个 user 请求都添加了一个名为“Truth”的请求头
gateway:routes:- id: user-serviceuri: lb://userservicepredicates:- Path=/user/**# 设置过滤器filters:# 添加请求头,格式:[请求头名称],[请求头内容]- AddRequestHeader=Truth,shit oh my gods!
如果你想一劳永逸的话,可以使用 defaultFilters 为全部路由设置请求头
gateway:routes:- id: user-serviceuri: lb://userservicepredicates:- Path=/user/**- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**# 默认所有路由都有此路由器default-filters:- AddRequestHeader=Truth,shit oh my gods!
全局过滤器
全局过滤器对所有路由转发同时生效
实现该过滤器需要两步:
- 实现
GlobalFilter
- 借助注解
@Order
设置过滤器优先级
// order设置-1表示最高优先级
@Order(-1)
@Component
public class AuthFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 取出参数并对参数进行校验ServerHttpRequest request = exchange.getRequest();MultiValueMap<String, String> params = request.getQueryParams();String auth = params.getFirst("authorization");// 检查授权参数是否为 "admin"if ("admin".equals(auth)) {// 授权通过,继续传递请求到下一个过滤器或后端服务return chain.filter(exchange);}// 授权失败,设置响应状态为 401 未授权exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);// 设置响应为完成状态,结束请求-响应的处理return exchange.getResponse().setComplete();}
}
三大过滤器:路由过滤器、defaultFilter、GlobalFilter 执行优先级以及顺序
跨域处理 CORS
相关文章:

【SpringCloud】微服务技术栈入门3 - Gateway快速上手
目录 GatewayWebFlux网关基本配置过滤器与断言工厂全局过滤器跨域处理 CORS Gateway WebFlux gateway 基于 webflux 构建 WebFlux 是基于反应式流概念的响应式编程框架,用于构建异步非阻塞的 Web 应用程序。它支持响应式编程范式,并提供了一种响应式的方…...

《理解深度学习》2023最新版本+习题答案册pdf
刚入门深度学习或者觉得学起来很困难的同学看过来了,今天分享的这本深度学习教科书绝对适合你。 就是这本已在外网获13.1万次下载的宝藏教科书《理解深度学习》。本书由巴斯大学计算机科学教授Simon J.D. Prince撰写,全书共541页,目前共有21…...

课题学习(五)----阅读论文《抗差自适应滤波的导向钻具动态姿态测量方法》
一、简介 抗差自适应滤波:利用等价权函数和自适应因子合理的分配信息,有效地滤除钻具振动对动态姿态测量的影响。、 针对导向钻井工具动态测量受钻具振动的影响而导致测量不准确的问题,提出一种抗差自适应滤波的动态空间姿态测量方法。通…...

一个CPU是怎么寻址的?
目录 CISC vs RISC 概念和历史 CISC vs RISC 对比举例:X86的CAS(做原子操作的) 对比举例:ARM的CAS(做原子操作的) 指令寻址 指令中的操作数的寻址方式 各语言对象内存布局对比 C内存布局 理解编译单元 Java对象内存布局 python对象模型 CPU …...

提高网站性能的10种方法:加速用户体验和降低服务器负担
在今天的数字时代,网站性能对于吸引和保留用户至关重要。一个快速加载的网站不仅提供更好的用户体验,还有助于降低服务器负担。以下是10种提高网站性能的方法,旨在加速页面加载速度和减少服务器的工作负荷。 压缩网页资源 利用压缩算法如gzi…...

195、SpringBoot--配置RabbitMQ消息Broker的SSL 和 管理控制台的HTTPS
开启Rabbitmq的一些命令: 小黑窗输入: rabbitmq-plugins enable rabbitmq_management 启动控制台插件,就是启动登录rabbitmq控制台的页面 rabbitmq_management 代表了RabbitMQ的管理界面。 rabbitmq-server 启动rabbitMQ服务器 上面这个&…...

确定性执行
确定性执行是指在给定输入的情况下,在有限的时间内产生一致的输出。 也就是输入到输出的运行过程是确定的,输入与输出有如下关系: 输出 = f (输入)。 确定性执行主要涉及以下几个方面: 时间确定性:计算的输出始终在给定的某个时间点之前发生,即程序不能无限制地运行下去…...

docker compose 管理应用服务的常用命令
一 、docker compose 是什么 Docker Compose是一个用来管理多个关联容器的工具,可以根据配置文件自动构建、管理、编排一组容器。 Docker Compose语境下的“服务”是指一组容器共同构成的一个应用服务后端。 Docker Compose语境下的“项目”是由一个或多个应用服务…...

产品安全—CC标准 ISO/IEC 15408:2022
文章目录 1. 变化2. Part1 简介和一般模型3. Part2 安全功能组件4. Part3 安全保障组件5. Part4 评估方法和活动规范框架6. Part5 预定义的安全要求包7. 总结 1. 变化 增加了两个部分:评估方法和活动规范框架 & 预定义的安全要求包 术语已经过审查和更新&#…...

Pytorch笔记之回归
文章目录 前言一、导入库二、数据处理三、构建模型四、迭代训练五、结果预测总结 前言 以线性回归为例,记录Pytorch的基本使用方法。 一、导入库 import numpy as np import matplotlib.pyplot as plt import torch from torch.autograd import Variable # 定义求…...

哪个证券公司可以加杠杆,淘配网是您的杠杆综合网站!
在证券市场中,投资者经常寻求提高资金杠杆以获得更高的回报。杠杆交易可以让您在不必拥有等额本金的情况下,参与更多的交易活动。然而,为了进行杠杆交易,您需要找到一家证券公司或平台,可以为您提供这种服务。本文将介…...

万字解读|怎样激活 TDengine 最高性价比?
不知不觉间,TDengine 已经 6 岁多了。在这 6 年多的时间里,我们从零开始,在一行又一行代码的淬炼下,TDengine 从 1.6 走过 2.0,终于走到如今的 3.0 时代。 自 2022 年下旬发布以来,经过我们不断地打磨优化…...

【目标检测】大图包括标签切分,并转换成txt格式
前言 遥感图像比较大,通常需要切分成小块再进行训练,之前写过一篇关于大图裁切和拼接的文章【目标检测】图像裁剪/标签可视化/图像拼接处理脚本,不过当时的工作流是先将大图切分成小图,再在小图上进行标注,于是就不考…...

gitlab登录出现的Invalid login or password问题
前提 我是在一个项目里创建的gitlab账号,想在别的项目里登录或者官网登录发现怎么都登陆不上 原因 在GitLab中,有两种不同的账号类型:项目账号和个人账号(官网账号)。 项目账号:项目账号是在特定GitLab…...

git本地创建分支并推送到远程
1. 创建本地分支并切换到该分支 比如我创建dev分支。git checkout -b相当于把两条命令git branch 分支名、git checkout分支名合成一条,来实现一条命令新建分支切换分支。 git checkout -b dev 2. 将dev分支推送到远程 -u参数与--set-upstream这一串是一个意思&am…...

手机待办事项app哪个好?
手机是日常很多人随身携带的设备,手机除了拥有通讯功能外,还能帮助大家高效管理日常工作,借助手机上的待办事项提醒APP可以快速地帮助大家规划日常事务,提高工作的效率。 过去,我也曾经在寻找一款能够将工作任务清晰罗…...

容器运行elasticsearch安装ik分词非root权限安装报错问题
有些应用默认不允许root用户运行,来确保应用的安全性,这也会导致我们使用docker run后一些操作问题,用es安装ik分词器举例(es版本8.9.0,analysis-ik版本8.9.0) 1. 容器启动elasticsearch 如挂载方式&…...

UE4游戏客户端开发进阶学习指南
前言 两年多前写过一篇入门指南,教大家在短时间内快速入门UE4的使用,在知乎被很多人收藏了。如今鸡佬使用UE快三年了,是时候更新一下进阶版本的学习指南。本文对于读者的要求: 有一定的C基础已经入门UE,能够用蓝图和…...

javaee SpringMVC 乱码问题解决
方法一 在web.xml文件中注册过滤器 <!-- 注册过滤器 设置编码 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param&…...

用ChatGPT做数据分析,提升10倍工作效率
目录 写报告分析框架报告框架指标体系设计 Excel 写报告 分析框架 拿到一个专题不知道怎么做?没关系,用ChatGPT列一下框架。 以上分析框架挺像那么回事,如果没思路的话,问问ChatGPT能起到找灵感的作用。 报告框架 报告的框架…...

【Pytorch笔记】4.梯度计算
深度之眼官方账号 - 01-04-mp4-计算图与动态图机制 前置知识:计算图 可以参考我的笔记: 【学习笔记】计算机视觉与深度学习(2.全连接神经网络) 计算图 以这棵计算图为例。这个计算图中,叶子节点为x和w。 import torchw torch.tensor([1.]…...

浏览器安装vue调试工具
下载扩展程序文件 下载链接:链接: 下载连接网盘地址, 提取码: 0u46,里面有两个crx,一个适用于vue2,一个适用于vue3,可根据vue版本选择不同的调试工具 crx安装扩展程序不成功,将文件改为rar文件然后解压 安装…...

C/C++学习 -- RSA算法
概述 RSA算法是一种广泛应用于数据加密与解密的非对称加密算法。它由三位数学家(Rivest、Shamir和Adleman)在1977年提出,因此得名。RSA算法的核心原理是基于大素数的数学问题的难解性,利用两个密钥来完成加密和解密操作。 特点 …...

基于若依ruoyi-nbcio支持flowable流程增加自定义业务表单(一)
因为需要支持自定义业务表单的相关流程,所以需要建立相应的关联表 1、首先先建表wf_custom_form -- ---------------------------- -- Table structure for wf_custom_form -- ---------------------------- DROP TABLE IF EXISTS wf_custom_form; CREATE TABLE wf…...

面试经典 150 题 1 —(数组 / 字符串)— 88. 合并两个有序数组
88. 合并两个有序数组 方法一: class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {for(int i 0; i<n;i){nums1[mi] nums2[i];}sort(nums1.begin(),nums1.end());} };方法二: clas…...

【大数据 | 综合实践】大数据技术基础综合项目 - 基于GitHub API的数据采集与分析平台
🤵♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…...

超高频RFID模具精细化生产管理方案
近二十年来,我国的模具行业经历了快速发展的阶段,然而,模具行业作为一个传统、复杂且竞争激烈的行业,企业往往以订单为导向,每个订单都需要进行新产品的开发,从客户需求分析、结构确定、报价、设计、物料准…...

FP-Growth算法全解析:理论基础与实战指导
目录 一、简介什么是频繁项集?什么是关联规则挖掘?FP-Growth算法与传统方法的对比Apriori算法Eclat算法 FP树:心脏部分 二、算法原理FP树的结构构建FP树第一步:扫描数据库并排序第二步:构建树 挖掘频繁项集优化&#x…...

Jmeter 分布式压测,你的系统能否承受高负载?
你可以使用 JMeter 来模拟高并发秒杀场景下的压力测试。这里有一个例子,它模拟了同时有 5000 个用户,循环 10 次的情况。 请求默认配置 token 配置 秒杀接口 结果分析 但是,实际企业中,这种压测方式根本不满足实际需求。下…...

什么是浮动密封?
浮动密封也称为机械面密封或双锥密封,是一种用于各种行业和应用的特殊类型的密封装置。它旨在提供有效的密封和保护,防止污染物的进入以及旋转设备中润滑剂或液体的润滑剂泄漏。 浮动密封件由相同的金属环组成,这些金属环称为密封环…...