springcloud搭建 初级人员的使用搭建。sentinel使用官网有详细的使用方法

代码仓库地址:https://github.com/zhaoyiwen-wuxian/shop-trench

package com.trench.filters;import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;/**全局拦截器进行拦截未登录等操作* 当然可以拦截其他等操作,需要进行根据自己等需求从而进行逻辑添加*** */
@Component
public class AuthGatewayFilters implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token=exchange.getRequest().getQueryParams().getFirst("token");if(StringUtils.isEmpty(token)){exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}return chain.filter(exchange);}
}
package com.trench.filters;import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.Arrays;
import java.util.List;@Component
@Slf4j
/**局部过滤器使用方法*/
public class TimeGatewayFiltersFactory extendsAbstractGatewayFilterFactory<TimeGatewayFiltersFactory.Config> {public TimeGatewayFiltersFactory(){super(Config.class);}@Overridepublic List<String> shortcutFieldOrder() {return Arrays.asList("show");}@Overridepublic GatewayFilter apply(TimeGatewayFiltersFactory.Config config) {return new GatewayFilter() {public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {if (!config.isShow()){return chain.filter(exchange);}long start = System.currentTimeMillis();return chain.filter(exchange).then(Mono.fromRunnable(()->{//添加自己想要进行存储的逻辑。可以存储数据库red is/es等中log.info("请求耗时:{}",System.currentTimeMillis()-start);}));}};}@Getter@Setterpublic static class Config {private boolean show;}
}

spring:
application:
name: api-gateway
cloud:
nacos:
config:
file-extension: yaml
server-addr: 127.0.0.1:8848
#添加其他的配置文件的读取
shared-configs:
- dataId: redis.yaml
refresh: true #是否支持动态刷新
profiles:
active: dev

#在nacos中创建一个api-gateway-dev.yaml 后将application.yml文件中数据全部copy到nacos中,并且删除application.yml文件

#appConfig:
#name: gateway 动态更新

#共享的环境配置:api-gateway.yaml 将公共的丢到这个里面。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.trench</groupId><artifactId>shop-trench</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>shop-gateway</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-cloud-alibaba-nacos-discovery.version>2.1.1.RELEASE</spring-cloud-alibaba-nacos-discovery.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-nacos-discovery</artifactId><version>${spring-cloud-alibaba-nacos-discovery.version}</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-spring-cloud-gateway-adapter</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--sleuth--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency></dependencies>
</project>
package com.trench.util.snow;import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;public class SnowFlakeFactory {/*** 默认的雪花算法句柄*/private static final String DEFAULT_SNOW_FLAKE = "snow_flake";/*** 缓存SnowFlake对象*/private static ConcurrentMap<String, SnowFlake> snowFlakeCache = newConcurrentHashMap<>(2);public static SnowFlake getSnowFlake(long datacenterId, long machineId) {return new SnowFlake(datacenterId, machineId);}public static SnowFlake getSnowFlake() {return new SnowFlake(SnowFlakeLoader.getDataCenterId(), SnowFlakeLoader.getMachineId());}public static SnowFlake getSnowFlakeFromCache() {SnowFlake snowFlake = snowFlakeCache.get(DEFAULT_SNOW_FLAKE);if(snowFlake == null) {snowFlake = new SnowFlake(SnowFlakeLoader.getDataCenterId(),SnowFlakeLoader.getMachineId());snowFlakeCache.put(DEFAULT_SNOW_FLAKE, snowFlake);}return snowFlake;}/*** 根据数据中心id和机器id从缓存中获取全局id* @param dataCenterId: 取值为1~31* @param machineId: 取值为1~31*/public static SnowFlake getSnowFlakeByDataCenterIdAndMachineIdFromCache(Long dataCenterId, Long machineId) {if (dataCenterId > SnowFlake.getMaxDataCeneterNum() || dataCenterId < 0) {throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0");}if (machineId > SnowFlake.getMaxMachineNum() || machineId < 0) {throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0");}String key =DEFAULT_SNOW_FLAKE.concat("_").concat(String.valueOf(dataCenterId)).concat("_").concat(String.valueOf(machineId));SnowFlake snowFlake = snowFlakeCache.get(key);if(snowFlake == null) {snowFlake = new SnowFlake(dataCenterId, machineId);snowFlakeCache.put(key, snowFlake);}return snowFlake;}
}
package com.trench.util.snow;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class SnowFlakeLoader {public static final String DATA_CENTER_ID = "data.center.id";public static final String MACHINE_ID = "machine.id";private volatile static Properties instance;static {InputStream in =SnowFlakeLoader.class.getClassLoader().getResourceAsStream("snowflake.properties");instance = new Properties();try {instance.load(in);} catch (IOException e) {e.printStackTrace();}}private static String getStringValue(String key){if(instance == null) return "";return instance.getProperty(key, "");}private static Long getLongValue(String key){String v = getStringValue(key);return (v == null || v.trim().isEmpty()) ? 0 : Long.parseLong(v);}public static Long getDataCenterId() {return getLongValue(DATA_CENTER_ID);}public static Long getMachineId() {return getLongValue(MACHINE_ID);}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.trench</groupId><artifactId>shop-trench</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>shop-product-api</module><module>shop-product-server</module><module>shop-util</module><module>shop-order-api</module><module>shop-order-server</module><module>shop-gateway</module></modules><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.3.RELEASE</version></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><spring-cloud-dependencies.version>Hoxton.SR8</spring-cloud-dependencies.version><spring-cloud-alibaba-dependencies.version>2.2.3.RELEASE</spring-cloud-alibaba-dependencies.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud-dependencies.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba-dependencies.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/695895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sora问世引发热议,一部分人已靠它赚钱?

这几天&#xff0c; 估计大家都被一款叫Sora的“文生视频”工具狠狠地刷屏了 问&#xff1a;Sora到底是什么 答&#xff1a;Sora是OpenAI发布的“核弹级”AI视频模型产品&#xff0c;“文生视频”60秒一镜到底&#xff0c;效果堪称“炸裂”&#xff01; OpenAI公司发布最新…

vue项目设置的端口号运行后会自动加一问题解决

vue项目设置的端口号运行后会自动加一问题解决 主要原因是之前运行项目后没有完全的关闭服务&#xff0c;导致再次运行项目端口号被占用&#xff0c;自动加一&#xff01; 问题解决 打开任务管理器&#xff0c;在进程中找到node相关进程&#xff0c;右键结束任务

Typescript初体验

Typescript Typescript 官网地址: https://www.typescriptlang.org/zh/ 使用 nvm 来管理 node 版本: https://github.com/nvm-sh/nvm 装 Typescript: npm install -g typescript使用 tsc 全局命令&#xff1a; // 查看 tsc 版本 tsc -v // 编译 ts 文件 tsc fileName.ts1.…

利用数字人技术“活”化吉祥物,打造“科技+”数融盛会

在第十四届全国冬季运动会上&#xff0c;吉祥物“蒙古彩娃”安达和塞努不再同于往常静态的吉祥物形象&#xff0c;而是升级为生动活泼、能够与观众实时互动的数字人形象&#xff0c;活跃于赛事宣传、场馆介绍等多个场景&#xff0c;为本届冰雪盛会注入数字活力&#xff0c;提升…

java中反射详解

反射详解 反射什么是反射&#xff1f;常见操作反射中常用类1.Class类获取Class对象的三张方式类名通过forName&#xff08;&#xff09;方法通过对象 2.Constructor类获取Constructor构造方法的方式执行Constructor构造方法的方式 3.Field类获取Field成员变量的方式获取所有成员…

Orchestrator源码解读 - 如何执行钩子脚本

Oc支持的钩子脚本 orchestrator支持钩子脚本&#xff0c;即在恢复过程调用的外部脚本。这些是通过 shell 调用的命令数组 OnFailureDetectionProcesses // 故障发现阶段PreGracefulTakeoverProcesses // 计划内切换流程之前执行&#xff0c;在master设置read_only 之前执行…

RoboRAVE世界机器人大会亚洲分会toio™专项挑战顺利收官,toio™实现“双首次”突破

2024年2月21日&#xff0c;北京——2024 RoboRAVE国际教育机器人大会&#xff08;下称RoboRAVE&#xff09;亚洲分会toio™专项挑战在北京科技大学成功举办。现场云集来自华北、华南、华东等全国各地40组杰出学生队伍&#xff0c;展开热烈的机器人编程限时挑战。本届toio™专项…

大模型中的token是什么?

定义 大模型的"token"是指在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;模型所使用的输入数据的最小单元。这些token可以是单词、子词或字符等&#xff0c;具体取决于模型的设计和训练方式。 大模型的token可以是单词级别的&#xff0c;也可以是子…

项目总结(ALL)

项目1&#xff1a; 卡尔曼滤波&#xff08;以及其他的滤波方法对比&#xff09; 预处理 GRU&#xff0c;LSTM等时间序列预测方法 MPC&#xff08;模型预测控制&#xff09; 单机控制算法 粒子群优化算法 1. 卡尔曼滤波 smoother KalmanSmoother(componentlevel_trend,…

Docker安装Postgresql12

1、搜索仓库中postgres docker search postgres 2、拉取镜像 docker pull postgres docker pull postgres:12 #拉取12版本的PG库 3、创建数据库文件夹 cd /temp/ && mkdir -m 755 postgres-data 注&#xff1a;-m表示权限&#xff0c;类chmod命令 4、执行命令启动…

echarts - 数据更新但图表不更新

当修改setOption值的时候&#xff0c;如果 option.series 是动态增加减少&#xff0c;图表渲染会出错。 比如&#xff0c;echarts 图表一开始只有单一的柱状图&#xff0c;后来通过 option.series 动态插入数据&#xff0c;新增折线图。这时候 echarts 图表是柱状图折线图&…

并发编程入门指南

文章目录 并发编程进程和线程的区别并发和并行的区别创建线程的方式线程之间的状态&#xff0c;状态之间的转换新建三个线程&#xff0c;如何保证按顺序执行wait方法和sleep的区别如何停止一个正在运行的线程synchronized关键字底层原理Monitor属于重量级锁&#xff0c;了解过锁…

day04_流程语句_if_while_for

今日内容 1.if 2.switch 3.while,do-while,for 零、复习 1算术运算符中除法特性 整数相除不保留小数 10/33 2什么作用,i和i什么区别 让数据自增1i,是在后先使用后自增i,是在前先自增后使用 3&& 和 & 有相同点和不同点 相同点: 两边判断式子,一错就错全对才对不同点…

HTML+CSS滚动条样式如何单独给firefox设置 scrollbar-width: none;,而不影响其他浏览器

要在Firefox中单独设置滚动条样式,你可以使用​​@-moz-document​​规则。这个规则允许你为特定的浏览器或浏览器引擎应用样式。 下面是一个例子,演示如何在Firefox中隐藏滚动条: @-moz-document url-prefix() {/* 在这里添加只对Firefox生效的样式 */body {scrollbar-wi…

一文了解web开发基础知识【HTML、CSS、JavaScript】

文章目录 1 前言1.1 HTML1.2 CSS1.3 JavaScript1.4 理解HTML、CSS、JavaScript之间的关系 2 HTML2.1 什么是网页2.2 什么是HTML2.2.1 文本内容2.2.1.1 标题 2.2.2 图像2.2.3 链接2.2.4 列表2.2.5 表格2.2.6 HTML代码注释 2.3 第一个HTML文件2.3.1 示例2.3.2 补充2.3.2.1 < l…

苹果iPad通过Code APP应用实现SSH连接服务器远程进行开发

文章目录 1. 在iPad下载Code APP2.安装cpolar内网穿透2.1 cpolar 安装2.2 创建TCP隧道 3. iPad远程vscode4. 配置固定TCP端口地址4.1 保留固定TCP地址4.2 配置固定的TCP端口地址4.3 使用固定TCP地址远程vscode 本文主要介绍开源iPad应用IDE Code App 如何下载安装&#xff0c;并…

Linux-查看服务器--硬件配置信息

在Linux服务器上查看硬件配置信息&#xff0c;可以使用一系列命令行工具。以下是一些常用命令来获取不同硬件组件的详细信息&#xff1a; 查看CPU信息&#xff1a; cat /proc/cpuinfo&#xff1a;显示处理器类型、型号、频率、核心数等详细信息。lscpu&#xff1a;提供更为人性…

五个简单的C#编程案例

案例一&#xff1a;Hello, World! csharp using System; class Program { static void Main() { Console.WriteLine("Hello, World!"); } } 这个案例是最基础的C#程序&#xff0c;它打印出“Hello, World!”到控制台。每个C#程…

基于springboot + vue实现的前后端分离-酒店管理系统

项目介绍 基于springboot vue实现的酒店管理系统一共有酒店管理员和用户这两种角色。 管理员功能 登录&#xff1a;管理员可以通过登录功能进入系统&#xff0c;确保只有授权人员可以访问系统。用户管理&#xff1a;管理员可以添加、编辑和删除酒店的用户&#xff0c;包括前…

运维SRE-18 自动化批量管理-ansible4

12.2handles handles触发器(条件)&#xff0c;满足条件后再做什么事情应用场景&#xff1a;想表示&#xff1a;配置文件变化&#xff0c;再重启服务 配置handlers之前&#xff0c;每次运行剧本都会重启nfs&#xff0c;无论配置文件是否变化。 [rootm01 /server/ans/playbook]…