聊城网站制作信息,网站建设公司的公司,天津外贸网络推广,建设部资质查询网站一、介绍
#xff08;1#xff09;提供界面配置配置服务限流、服务降级、服务熔断 #xff08;2#xff09;SentinelResource的blockHandler只处理后台配置的异常#xff0c;运行时异常fallBack处理#xff0c;且资源名为value时才生效#xff0c;走兜底方法
二、安装…一、介绍
1提供界面配置配置服务限流、服务降级、服务熔断 2SentinelResource的blockHandler只处理后台配置的异常运行时异常fallBack处理且资源名为value时才生效走兜底方法
二、安装并启动sentinel
1官网 2运行java -jar sentinel-dashboard-1.8.6.jar 3访问http://localhost:8080/ 注sentinel是懒加载的访问接口后才会显示
三、搭建项目
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.xsdparentartifactIddemo20220821/artifactIdgroupIdcom.wsh.springcloud/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdcloudalibaba-sentinel-service/artifactIddependenciesdependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-sentinel/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-sentinel-datasource/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-nacos-config/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdcom.wsh.springcloud/groupIdartifactIdcloud-api-common/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies/project2编写application.yml
server:port: 8401spring:application:name: cloudalibaba-sentinel-servicecloud:nacos:discovery:server-addr: localhost:8848sentinel:transport:dashboard: localhost:8080port: 8719management:endpoints:web:exposure:include: *3编写启动类
package com.wsh.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** ClassName SentinelService8401* Description: TODO* Author wshaha* Date 2023/10/19* Version V1.0**/
SpringBootApplication
EnableDiscoveryClient
public class SentinelService8401 {public static void main(String[] args) {SpringApplication.run(SentinelService8401.class, args);}
}
4编写Controller
package com.wsh.springcloud.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** ClassName TestController* Description: TODO* Author wshaha* Date 2023/10/19* Version V1.0**/
RestController
public class TestController {GetMapping(/test)public String test(){return test;}
}
四、服务限流 1打开界面 2阈值 QPS每秒请求数 并发线程数处理请求的线程数 3关联 /test炸了/test1也炸 4预热阈值先从阈值/3开始在预热时长单位秒内逐渐上升 5排队等待阈值类型必须设置为QPS超出阈值的请求将会排队等待的超时时间设置为20秒
五、服务降级
1满足条件后服务在规定时间内熔断 2慢调用比例 3异常比例 4异常数
六、热点参数限流
1要用SentinelResource定义资源名和兜底方法 GetMapping(/test2)SentinelResource(value test2, blockHandler test2_solve)public String test2(RequestParam(name) String name) {log.info(test2);return test2;}public String test2_solve(String name, BlockException blockException){return block;}2 3定义规则时指定参数的值
七、兜底方法编写方式优化
1 GetMapping(/test3)SentinelResource(value test3, blockHandlerClass BlockHandler.class, blockHandler test3_solve)public String test3() {log.info(test3);return test3;}2编写BlockHandler类
package com.wsh.springcloud.handler;import com.alibaba.csp.sentinel.slots.block.BlockException;/*** ClassName BlockHandler* Description: TODO* Author wshaha* Date 2023/10/19* Version V1.0**/
public class BlockHandler {public static String test3_solve(BlockException blockException){return block;}
}
3
八、配置fallback、blockHandler
1exceptionsToIgnore 用于忽略异常不走fallback GetMapping(/test3)SentinelResource(value test3, blockHandlerClass BlockHandler.class, blockHandler test3_solve,fallbackClass FallBackHandler.class, fallback test3_solve1,exceptionsToIgnore NullPointerException.class)public String test3(RequestParam(name) String name) {if (name.equals(wsh)){throw new IllegalArgumentException();}return test3;}2
public class BlockHandler {public static String test3_solve(String name, BlockException blockException){return block;}
}public class FallBackHandler {public static String test3_solve1(String name, Throwable throwable){return block1;}
}九、配置openFeign
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.xsdparentartifactIddemo20220821/artifactIdgroupIdcom.wsh.springcloud/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdcloudalibaba-consumer-order84/artifactIddependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-sentinel/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-sentinel-datasource/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdcom.wsh.springcloud/groupIdartifactIdcloud-api-common/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies/project2编写application.yml
server:port: 84spring:application:name: cloudalibaba-consumer-ordercloud:nacos:discovery:server-addr: localhost:8848sentinel:transport:dashboard: localhost:8080port: 8719management:endpoints:web:exposure:include: *server-url: http://cloudalibaba-provider-paymentfeign:sentinel:enabled: true3编写启动类
package com.wsh.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;/*** ClassName ConsumerOrder84* Description: TODO* Author wshaha* Date 2023/10/19* Version V1.0**/
EnableDiscoveryClient
EnableFeignClients
SpringBootApplication
public class ConsumerOrder84 {public static void main(String[] args) {SpringApplication.run(ConsumerOrder84.class, args);}
}
4编写PaymentService
package com.wsh.springcloud.service;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;/*** ClassName PaymentService* Description: TODO* Author wshaha* Date 2023/10/19* Version V1.0**/
FeignClient(value cloudalibaba-provider-payment, fallback PaymentServiceHandler.class)
public interface PaymentService {GetMapping(/payment/test)public String test();
}
5编写fallback类
package com.wsh.springcloud.service;import org.springframework.stereotype.Component;/*** ClassName PaymentServiceHandler* Description: TODO* Author wshaha* Date 2023/10/19* Version V1.0**/
Component
public class PaymentServiceHandler implements PaymentService{Overridepublic String test() {return fallback;}
}
6编写Controller
package com.wsh.springcloud.controller;import com.wsh.springcloud.service.PaymentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** ClassName TestController* Description: TODO* Author wshaha* Date 2023/10/19* Version V1.0**/
RestController
public class TestController {Autowiredprivate PaymentService paymentService;GetMapping(/consumer/test)public String test(){return paymentService.test();}
}
7编写服务提供者Controller
package com.wsh.springcloud.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** ClassName TestController* Description: TODO* Author wshaha* Date 2023/10/18* Version V1.0**/
RestController
public class TestController {Value(${server.port})private String port;GetMapping(/payment/test)public String test(){int i 1 / 0;return test: port;}
}
8运行
十、配置持久化
1将规则持久化到nacos保存只能先在nacos里编写好才有效 2pom.xml增加依赖 dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-nacos/artifactId/dependency3修改application.yml sentinel:transport:dashboard: localhost:8080port: 8719datasource:dsl:nacos:server-addr: localhost:8848dataId: cloudalibaba-sentinel-servicegroupId: DEFAULT_GROUPdata-type: jsonrule-type: flow4nacos里创建配置
[{resource: /consumer/test,limitApp: default,grade: 1,count: 1,strategy: 0,controlBehavior: 0,clusterMode: false}
]