怎么在阿里云建网站,杭州论坛网站建设,网站ip解析,企业网站备案多少钱一、准备
docker安装好sentinel-dashboard#xff08;sentinel控制台#xff09;#xff0c;参考docker安装好各个组件的命令启动sentinel-dashboard#xff0c;我的虚拟机ip为192.168.200.131#xff0c;sentinel-dashboard的端口为8858
二、整合sentinel的主要工作
在…一、准备
docker安装好sentinel-dashboardsentinel控制台参考docker安装好各个组件的命令启动sentinel-dashboard我的虚拟机ip为192.168.200.131sentinel-dashboard的端口为8858
二、整合sentinel的主要工作
在需要监控的服务中引入spring-cloud-starter-alibaba-sentinel依赖在bootstrap.yml中设置好sentinel-dashboard的ip:port 在我的项目中给order-service和product-service都引入了sentinel # pom.xml
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId
/dependency# bootstrap.yml
spring:cloud:sentinel:transport:dashboard: 192.168.200.131:8858三、查看sentinel控制台
启动两个服务docker启动sentinel控制台 浏览器输入:http://192.168.200.131:8858/输入默认账号密码都是sentinel 刚开始控制台左边只能看到sentinel-dashboard只有当我们第一次访问过后相应的服务和请求才会在左边和簇点链路中出现 四、控制台基础功能
4.1 流量控制
4.2 熔断降级
4.2.1 当未配置熔断降级功能时
对product-service的/product/getByObj限流为QPS10超过10则迅速失败
使用jmeter进行压测QPS为20访问接口为http://127.0.0.1:8081/order/get2发现20个请求里有10个请求访问失败浏览器报500错误 此外idea控制台报异常
feign.FeignException$TooManyRequests: [429] during [POST] to [http://product-service/product/getByObj] [IProductClient#getByObj(ProductDTO)]: [Blocked by Sentinel (flow limiting)]sentinel控制台显示有10个请求被拒绝 4.2.1 给IProductClient配置熔断降级功能
以IProductClient这个feign接口为例当这个接口对应的http请求被限流阻断时启用一个新的IProductClient对服务进行降级实际项目中比如当前请求繁忙请稍后访问或者推荐别的页面。 步骤如下
在sd-api模块的com.hdl.api.client.product包下建一个fallback包用来存放feignclient的请求调用被熔断时降级处理的类在该包下建ProductClientFallback类在IProductClient的FeignClient注解上配置fallbackFactory ProductClientFallback.class 【1】需要将ProductClientFallback类放入ioc容器【2】因此在com.hdl.api.config包下建一个FallbackConfig用来生产ProductClientFallbackbean同时将FallbackConfig放到·spring.factories·文件里在order-service和product-service模块的bootstrap.yml中配置feign.sentinel.enabledtrue【3】
结构如下 sd-api模块不需要引入sentinel依赖ProductClientFallback类代码如下
Slf4j
public class ProductClientFallback implements FallbackFactoryIProductClient {Overridepublic IProductClient create(Throwable cause) {log.error(查询product服务异常,cause);return new IProductClient() {Overridepublic ProductDTO getById(Integer id, Integer price) {ProductDTO productDTO new ProductDTO();productDTO.setName(getById的默认product);return productDTO;}Overridepublic ProductDTO getByObj(ProductDTO productDTO) {ProductDTO productDTO1 new ProductDTO();productDTO.setName(getByObj的默认product);return productDTO1;}Overridepublic ProductDTO getByParams(ProductDTO productDTO, Integer price) {ProductDTO productDTO2 new ProductDTO();productDTO.setName(getByParams的默认product);return productDTO2;}};}
}其它两个模块结构
测试 sentinel限流qps为10
使用jmeter进行压测QPS为20访问接口为http://127.0.0.1:8081/order/get2发现20个请求里虽然超过了限流但返回全都成功了并且熔断的feign走的fallback返回的是默认的null
idea控制台打印出了fallback类的日志并且有异常 feign.FeignException$TooManyRequests: [429] during [POST] to [http://product-service/product/getByObj] [IProductClient#getByObj(ProductDTO)]: [Blocked by Sentinel (flow limiting)]sentinel控制台通过了12个跟限流的10差不多拒绝了8个