首页
关于
友链
Search
1
wlop 4K 壁纸 4k8k 动态 壁纸
1,470 阅读
2
Nacos持久化MySQL问题-解决方案
932 阅读
3
Docker搭建Typecho博客
752 阅读
4
滑动时间窗口算法
728 阅读
5
Nginx反向代理微服务配置
699 阅读
生活
解决方案
JAVA基础
JVM
多线程
开源框架
数据库
前端
分布式
框架整合
中间件
容器部署
设计模式
数据结构与算法
安全
开发工具
百度网盘
天翼网盘
阿里网盘
登录
Search
标签搜索
java
javase
docker
java8
springboot
thread
spring
分布式
mysql
锁
linux
redis
源码
typecho
centos
git
map
RabbitMQ
lambda
stream
少年
累计撰写
189
篇文章
累计收到
24
条评论
首页
栏目
生活
解决方案
JAVA基础
JVM
多线程
开源框架
数据库
前端
分布式
框架整合
中间件
容器部署
设计模式
数据结构与算法
安全
开发工具
百度网盘
天翼网盘
阿里网盘
页面
关于
友链
搜索到
2
篇与
的结果
2022-10-27
CentOS安装Sentinel并自启动
CentOS安装Sentinel设置自启动1、下载下载地址https://github.com/alibaba/Sentinel/releases2、安装提前创建好安装路径、Jar包存放文件夹、脚本执行文件夹、日志存放文件夹mkdir /usr/local/ sentinel mkdir /usr/local/sentinel jar mkdir /usr/local/sentinel sh mkdir /usr/local/sentinel log将sentinel-dashboard-1.8.6.jar执行Jar包上传至jar文件夹3、脚本编写脚本sentinel.sh,按照自己路径、版本号调整,存放到上面新建的sh文件夹中。脚本如下:#!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 SENTINEL_NAME=sentinel-dashboard-1.8.6.jar #使用说明,用来提示输入参数 usage() { echo "Usage: sh sentinel.sh [start|stop|restart|status]" exit 1 } #检查程序是否在运行 is_exist(){ pid=`ps -ef|grep $SENTINEL_NAME|grep -v grep|awk '{print $2}' ` #如果不存在返回1,存在返回0 if [ -z "${pid}" ]; then return 1 else return 0 fi } #启动方法 start(){ is_exist if [ $? -eq "0" ]; then echo "${SENTINEL_NAME} is already running. pid=${pid} ." else nohup java -Dserver.port=9100 -Dcsp.sentinel.dashboard.server=192.168.56.10:9100 -Dproject.name=sentinel-dashboard -jar /usr/local/sentinel/jar/$SENTINEL_NAME > /usr/local/sentinel/log/sentinellog.file 2>&1 & #nohup java -jar /usr/local/sentinel/jar/$SENTINEL_NAME > /usr/local/sentinel/log/sentinellog.file 2>&1 & echo "${SENTINEL_NAME} start success" fi } #停止方法 stop(){ is_exist if [ $? -eq "0" ]; then kill -9 $pid else echo "${SENTINEL_NAME} is not running" fi } #输出运行状态 status(){ is_exist if [ $? -eq "0" ]; then echo "${SENTINEL_NAME} is running. Pid is ${pid}" else echo "${SENTINEL_NAME} is NOT running." fi } #重启 restart(){ stop start } #根据输入参数,选择执行对应方法,不输入则执行使用说明 case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac进入/usr/local/sentinel/sh/文件夹下,执行命令修改权限chmod +x sentinel.sh注意:1、如果直接复制到windows中文本的,注意windows和linx的换行符不同,导致启动失败,可使用notepad++中编辑-->文档格式转换-->转换成Unix格式。2、注意给脚本设置权限4、测试本地测试是否能够启动启动sentinel服务sh sentinel.sh start停止sentinel服务sh sentinel.sh stop重启sentinel服务sh sentinel.sh restart查看sentinel服务状态sh sentinel.sh status服务启动后,可通过IP+端口+项目名访问Sentinel登录页面5、自启动本地测试可通过命令启动没问题后,编写启动服务sentinel.service,放到/usr/lib/systemd/system目录,内容如下:[Unit] Description=sentinel After=network.target [Service] Environment="JAVA_HOME=/usr/local/java/jdk-11.0.10" Type=forking ExecStart=/usr/local/sentinel/sh/sentinel.sh start ExecReload=/usr/local/sentinel/sh/entinel.sh stop ExecStop=/usr/local/sentinel/sentinel/sh/sentinel.sh restart PrivateTmp=true [Install] WantedBy=multi-user.target重载所有服务systemctl daemon-reload设置开机启动systemctl enable sentinel.service查看开机启动状态systemctl is-enabled sentinel.service查看服务状态systemctl status sentinel手动启动 Sentinelsystemctl start sentinel手动停止Sentinelsystemctl stop sentinel手动重启Sentinelsystemctl restart sentinel6、结果根据启动日志INFO: Sentinel log output type is: file INFO: Sentinel log charset is: utf-8 INFO: Sentinel log base directory is: /root/logs/csp/ INFO: Sentinel log name use pid is: false INFO: Sentinel log level is: INFO . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.5.12) 2022-10-27 15:07:50.068 INFO 733 --- [ main] c.a.c.s.dashboard.DashboardApplication : Starting DashboardApplication using Java 11.0.10 on 10.0.2.15 with PID 733 (/usr/local/sentinel/jar/sentinel-dashboard-1.8.6.jar started by root in /) 2022-10-27 15:07:50.280 INFO 733 --- [ main] c.a.c.s.dashboard.DashboardApplication : No active profile set, falling back to 1 default profile: "default" 2022-10-27 15:08:54.090 INFO 733 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 9100 (http) 2022-10-27 15:08:54.616 INFO 733 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2022-10-27 15:08:54.616 INFO 733 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.60] 2022-10-27 15:08:57.256 INFO 733 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2022-10-27 15:08:57.259 INFO 733 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 40159 ms 2022-10-27 15:08:58.193 INFO 733 --- [ main] c.a.c.s.dashboard.config.WebConfig : Sentinel servlet CommonFilter registered 2022-10-27 15:09:04.587 INFO 733 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 9100 (http) with context path '' 2022-10-27 15:09:04.788 INFO 733 --- [ main] c.a.c.s.dashboard.DashboardApplication : Started DashboardApplication in 79.475 seconds (JVM running for 82.322) 2022-10-27 15:09:13.768 INFO 733 --- [nio-9100-exec-3] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2022-10-27 15:09:13.807 INFO 733 --- [nio-9100-exec-3] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2022-10-27 15:09:14.119 INFO 733 --- [nio-9100-exec-3] o.s.web.servlet.DispatcherServlet : Completed initialization in 311 ms启动成功,通过访问IP+端口+项目,成功访问到Sentinel登录页面,账号:sentinel,密码:sentinel
2022年10月27日
266 阅读
0 评论
2 点赞
2022-03-13
SpringBoot整合Sentinel
SpringBoot整合Sentinel1、引入依赖<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>2、下载安装Sentinel可视化控制台下载自己引入sentinel对应的核心包版本,下载地址:https://github.com/alibaba/Sentinel/releases运行Sentinel可视化控制台java -jar sentinel-dashboard-1.8.1.jar注意自己的版本。打开http://127.0.0.1:8080/,默认账号密码sentinel3、微服务配置sentinelapplication.ymlspring: cloud: sentinel: transport: port: 8719 dashboard: localhost:8080port: 8719端口随意,只要不被占用,用于各微服务与控制台通讯。4、查看监控信息启动微服务,随意访问一个接口,Sentinel控制台即可看到实施监控信息。5、启用相关功能可在Sentinel控制台调整相应功能。默认所有流控设置都是保存在内存中,重启服务就没有了。6、添加监控图标引入审计start,sentinel会自动根据spring-boot-starter-actuator监控。<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>2.6.1</version> </dependency>开启监控图标management.endpoints.web.exposure.include=*7、自定义流控返回提示信息import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler; import com.alibaba.csp.sentinel.slots.block.BlockException; import com.alibaba.fastjson.JSON; import com.yanxizhu.common.utils.R; import org.springframework.context.annotation.Configuration; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @description: Sentinel流控信息提示自定i * @author: <a href="mailto:batis@foxmail.com">清风</a> * @date: 2022/3/13 20:14 * @version: 1.0 */ @Configuration public class MySentinelConfig implements BlockExceptionHandler { @Override public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws Exception { R r = R.error(10000, "自定义提示"); httpServletResponse.setContentType("application/json;charset=utf-8"); httpServletResponse.getWriter().write(JSON.toJSONString(r)); } }限流规则可参考官网限流文档。每一个微服务都有一个自己的自定义流控返回提示信息,其它配置一样,只是提示信息不同。8、熔断、降级针对Feign远程调用熔断引入Feign远程调用依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>打开 Sentinel 对 Feign 的支持:feign.sentinel.enabled=true熔断实现@FeignClient(value = "renren-fast",fallback = SeckillFeignServiceFallBack.class) public interface CardFeignService { @GetMapping("/sys/user/list") public R list(@RequestParam Map<String, Object> params); }熔断回调@S1f4j @Component public class SeckillFeignServiceFallBack implements SeckillFeignService{ @Override public R getskuseckillInfo(Long skuld) { Log.info("熔断方法调用...getskuSecki11Info"); return R.error(com.yanxizhu.family.common.exception.BizCodeEnume.TOO_MWANY_REQUEST.getCode(); com.yanxizhu.family.common.exception.BizCodeEnume.TOO_MANY_REQUEST.getAsg()); } }调用方:手动指定远程服务的降级策略。远程服务被降级处理。触发我们的熔断回调方法。提供方:超大浏览的时侯,必须牺牲一些远程服务。在服务的提供方(远程服务)指定降级策略;提供方是在运行。但是不运行自己的业务逻辑,返回的是默认的降级数据(限流的数据)。@SentinelResource 注解用来标识资源是否被限流、降级。上述例子上该注解的属性 sayHello 表示资源名。@SentinelResource 还提供了其它额外的属性如 blockHandler,blockHandlerClass,fallback 用于表示限流或降级的操作(注意有方法签名要求),更多内容可以参考 Sentinel 注解支持文档。若不配置 blockHandler、fallback 等函数,则被流控降级时方法会直接抛出对应的 BlockException;若方法未定义 throws BlockException 则会被 JVM 包装一层 UndeclaredThrowableException。注:一般推荐将 @SentinelResource 注解加到服务实现上,而在 Web 层直接使用 Spring Cloud Alibaba 自带的 Web 埋点适配。Sentinel Web 适配同样支持配置自定义流控处理逻辑,参考 相关文档。9、自定义受保护的资源1)、代码try(Entry entry =SphU.entry("seckillSkus"))(/业务逻辑catch(Execption e)(}2)、基于注解。eSentinelResource(value ="getCurrentSeckiLLSkusResource",blockHandler ="blockHandler")无论是1,2方式一定要配置被限流以后的默认返回注:一般推荐将 @SentinelResource 注解加到服务实现上,而在 Web 层直接使用 Spring Cloud Alibaba 自带的 Web 埋点适配。Sentinel Web 适配同样支持配置自定义流控处理逻辑,参考 相关文档。10、网关限流引入网关sentinel依赖<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId> <version>x.y.z</version> </dependency>使用时只需注入对应的 SentinelGatewayFilter 实例以及 SentinelGatewayBlockExceptionHandler 实例即可(若使用了 Spring Cloud Alibaba Sentinel,则只需按照文档进行配置即可,无需自己加 Configuration)。更多网关限流可参考官方文档11、定制网关流控返回参考官方文档
2022年03月13日
259 阅读
0 评论
5 点赞