网站建设的知识点有哪些,仿win8 网站,做网站 人员,淄博桓台网站建设公司目录 一、简介Sentinel 是什么如何引入Sentinel 二、服务搭建1.安装Sentinel控制台1.1 下载1.2 启动1.3 访问 2.改造服务提供者cloud-provider服务2.1 引入依赖2.2 添加API2.3 添加配置文件 3.改造cloud-consumer-feign服务3.1 引入依赖3.2 添加Feign接口3.3 添加服务降级类3.4… 目录 一、简介Sentinel 是什么如何引入Sentinel 二、服务搭建1.安装Sentinel控制台1.1 下载1.2 启动1.3 访问 2.改造服务提供者cloud-provider服务2.1 引入依赖2.2 添加API2.3 添加配置文件 3.改造cloud-consumer-feign服务3.1 引入依赖3.2 添加Feign接口3.3 添加服务降级类3.4 改造FeignService3.5 修改配置文件 三、运行测试1.启动项目1.1 启动服务提供者1.2 启动服务消费者 2.调用测试接口2.1 OpenFeign服务降级测试2.2 Sentinel流控规则测试 温馨提示全套教程请查看 教程总览 一、简介
Sentinel 是什么
Sentinel是分布式系统的流量防卫兵。
随着微服务的流行服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。
Sentinel 具有以下特征:
丰富的应用场景Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景例如秒杀即突发流量控制在系统容量可以承受的范围、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控Sentinel 同时提供实时的监控功能。我们可以在控制台中看到接入应用的单台机器秒级数据甚至 500 台以下规模的集群的汇总运行情况。广泛的开源生态Sentinel 提供开箱即用的与其它开源框架/库的整合模块例如与 Spring Cloud、Apache Dubbo、gRPC、Quarkus 的整合。我们只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。同时 Sentinel 提供Java/Go/C 等多语言的原生实现。完善的 SPI 扩展机制Sentinel 提供简单易用、完善的 SPI 扩展接口。我们可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。 Sentinel 分为两个部分:
核心库Java 客户端不依赖任何框架/库能够运行于所有 Java 运行时环境同时对 Dubbo / Spring Cloud 等框架也有较好的支持。控制台Dashboard基于 Spring Boot 开发打包后可以直接运行不需要额外的 Tomcat 等应用容器。
如何引入Sentinel
如果要在我们的项目中引入 Sentinel使用 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-sentinel 的 starter。
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId
/dependency参考文档 请查看 官网
二、服务搭建
1.安装Sentinel控制台
1.1 下载
Sentinel提供了多种安装方式包括
下载源码通过Maven构建下载发行包解压安装
这里我们通过下载 最新稳定版本 发行包的方式安装。
1.2 启动 注意启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。 java -Dserver.port8080 -Dcsp.sentinel.dashboard.serverlocalhost:8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard.jar其中 -Dserver.port8080 用于指定 Sentinel 控制台端口为 8080。
1.3 访问
打开浏览器访问http://localhost:8080/ 默认用户名和密码都是 sentinel。
2.改造服务提供者cloud-provider服务
有关 cloud-provider 服务的搭建过程请参考之前的章节 基于Spring Boot 3.x 搭建教程
2.1 引入依赖
pom.xml 内容如下
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.ash/groupIdartifactIdspring-cloud-alibaba-demo/artifactIdversion${revision}/version/parentartifactIdcloud-provider/artifactIddescription服务提供者/descriptiondependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency!-- Nacos注册中心 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency!-- Nacos配置中心 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId/dependency!-- bootstrap配置 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-bootstrap/artifactId/dependency!--alibaba-sentinel--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId/dependency!-- lombok --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependenciesbuildplugins!-- 打包插件 --plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins!-- 将源码中的xml文件打包到jar中 --resourcesresourcedirectorysrc/main/java/directoryexcludesexclude**/*.java/exclude/excludes/resourceresourcedirectorysrc/main/resources/directoryincludesinclude**/*.*/include/includes/resource/resources/build
/project2.2 添加API
新建 TestSentinelController.java添加测试API并且定义sentinel资源 Sentinel 提供了 SentinelResource 注解用于定义资源并提供了 AspectJ 的扩展用于自动定义资源、处理 BlockException 等。 value资源名称必需项不能为空blockHandler / blockHandlerClassblockHandler 对应处理 BlockException 的函数名称可选项。blockHandler 函数访问范围需要是 public返回类型需要与原方法相匹配参数类型需要和原方法相匹配并且最后加一个额外的参数类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数则可以指定 blockHandlerClass 为对应的类的 Class 对象注意对应的函数必需为 static 函数否则无法解析。 内容如下
package org.ash.provider.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;RestController
public class TestSentinelController {GetMapping(/provider/sentinel/test/{message})SentinelResource(value providerSentinelTest, blockHandler handlerBlockHandler)public String providerSentinelTest(PathVariable(message) String message) {return sentinel测试 message;}public String handlerBlockHandler(PathVariable(message) String message, BlockException exception) {return providerSentinelTest服务不可用 触发sentinel流控配置规则\to(╥﹏╥)o;}
}2.3 添加配置文件
resources目录下新建 application.yml 配置文件内容如下
spring:cloud:sentinel:transport:dashboard: localhost:8080 #配置Sentinel dashboard控制台服务地址port: 8719 #默认8719端口假如被占用会自动从8719开始依次1扫描,直至找到未被占用的端口3.改造cloud-consumer-feign服务
有关 cloud-consumer-feign 服务的搭建过程请参考之前的章节 基于Spring Boot 3.x 搭建教程
3.1 引入依赖
pom.xml 内容如下
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.ash/groupIdartifactIdspring-cloud-alibaba-demo/artifactIdversion${revision}/version/parentartifactIdcloud-consumer-feign/artifactIddescription服务消费者-feign/descriptiondependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency!-- Nacos注册中心 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency!-- loadbalancer负载均衡 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency!-- openfeign --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency!-- sentinel --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId/dependency!-- lombok --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependenciesbuildplugins!-- 打包插件 --plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins!-- 将源码中的xml文件打包到jar中 --resourcesresourcedirectorysrc/main/java/directoryexcludesexclude**/*.java/exclude/excludes/resourceresourcedirectorysrc/main/resources/directoryincludesinclude**/*.*/include/includes/resource/resources/build
/project3.2 添加Feign接口
在 FeignService.java 中新增调用服务提供者接口 内容如下
package org.ash.consumer.feign.service;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;FeignClient(value cloud-provider)
public interface FeignService {GetMapping(/provider/test/{message})public String getProviderTest(PathVariable(message) String message);GetMapping(/provider/sentinel/test/{message})public String providerSentinelTest(PathVariable(message) String message);
}3.3 添加服务降级类
新建 FeignServiceFallback.java 服务降级类实现 FeignService.java 并实现方法 内容如下
package org.ash.consumer.feign.service.fallback;import org.ash.consumer.feign.service.FeignService;
import org.springframework.stereotype.Component;Component
public class FeignServiceFallback implements FeignService {Overridepublic String getProviderTest(String message) {return 对方服务不可用开始服务降级处理;}Overridepublic String providerSentinelTest(String message) {return 对方服务不可用开始服务降级处理;}
}3.4 改造FeignService
改造 FeignService.java 的 FeignClient 注解添加 fallback 属性 内容如下
package org.ash.consumer.feign.service;import org.ash.consumer.feign.service.fallback.FeignServiceFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;FeignClient(value cloud-provider, fallback FeignServiceFallback.class)
public interface FeignService {GetMapping(/provider/test/{message})public String getProviderTest(PathVariable(message) String message);GetMapping(/provider/sentinel/test/{message})public String providerSentinelTest(PathVariable(message) String message);
}3.5 修改配置文件
默认 sentinel 对 feign 的支持是关闭的我们需要在配置文件中打开。 内容如下
server:port: 9003spring:application:# 服务名称name: cloud-consumer-feigncloud:nacos:# nacos注册中心discovery:# 服务ip:portserver-addr: 127.0.0.1:8848openfeign:client:config:default:#连接超时时间connectTimeout: 5000#读取超时时间readTimeout: 5000# 开启feign集成sentinel服务降级
feign:sentinel:enabled: truemanagement:endpoints:web:exposure:include: *三、运行测试
1.启动项目
1.1 启动服务提供者 1.2 启动服务消费者 2.调用测试接口
2.1 OpenFeign服务降级测试
打开浏览器调用我们之前写的测试接口 http://localhost:9003/consumer/feign/sentinel/test/sentinel成功返回消息 这时我们停止服务提供者 cloud-provider 服务
然后再次通过浏览器调用测试接口 http://localhost:9003/consumer/feign/sentinel/test/sentinel看到返回服务降级的信息表示服务降级成功
2.2 Sentinel流控规则测试
重新启动 cloud-provider 服务提供者 再次通过浏览器调用测试接口 http://localhost:9003/consumer/feign/sentinel/test/sentinel然后打开Sentinel 控制台刷新页面找到测试接口添加流控规则 流控规则 资源名 对应代码 SentinelResource 的 value 值。流控规则 单机阈值 为 1 表示1秒钟内请求1次就是正常若超过1次就会失败执行服务提供者的 blockHandler 通过浏览器快速调用测试接口 http://localhost:9003/consumer/feign/sentinel/test/sentinel查看是否返回流控配置规则消息如果返回流控配置规则消息则表示 Sentinel 流控规则配置成功。
至此OpenFeign集成Sentinel实现服务降级成功 温馨提示全套教程请查看 教程总览