springboot整合sentinel
springboot整合sentinel
·
sentinel官方使用文档:Sentinel · alibaba/spring-cloud-alibaba Wiki · GitHub
引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

下载sentinel控制台
下载对应版本的sentinel.jar Releases · alibaba/Sentinel · GitHub
运行jar
java -jar .\sentinel-dashboard-1.6.3.jar
如若8080端口冲突,可使用
-Dserver.port=新端口进行设置。
配置控制台信息
application.yml
spring:
cloud:
sentinel:
transport:
port: 8719 #默认
dashboard: localhost:8080
控制台显示
第一次发送请求显示

流控规则简单使用
新增流控规则


超出请求频率

实时监控配置
pom添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
application.yml 添加配置
management.endpoints.web.exposure.include=*

自定义流控响应
添加配置
package com.hdb.pingmoweb.seckill.config;
import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlBlockHandler;
import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.fastjson.JSON;
import com.hdb.pingmoweb.common.utils.R;
import org.springframework.context.annotation.Configuration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Configuration
public class SentinelConfig {
public SentinelConfig() {
WebCallbackManager.setUrlBlockHandler(new UrlBlockHandler() {
@Override
public void blocked(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws IOException {
R error = R.error("请求流量过大");
httpServletResponse.setCharacterEncoding("UTF-8");
httpServletResponse.setContentType("application/json");
httpServletResponse.getWriter().write(JSON.toJSONString(error));
}
});
}
}
测试返回

Feign 远程调用熔断
配置文件打开 Sentinel 对 Feign 的支持:
feign.sentinel.enabled=true
创建feign失败回调类,返回熔断后数据,保证其他服务能正常运行。
package com.hdb.pingmoweb.seckill.feign.fallback;
import com.hdb.pingmoweb.common.utils.R;
import com.hdb.pingmoweb.seckill.feign.ProductFeignService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Map;
@Slf4j
@Component
public class ProductFeignServiceFallBack implements ProductFeignService {
@Override
public R list(Map<String, Object> params) {
log.info("熔断方法调用...list");
return R.error("太多请求");
}
}
feign服务接口配置熔断回调类
package com.hdb.pingmoweb.seckill.feign;
import com.hdb.pingmoweb.common.utils.R;
import com.hdb.pingmoweb.seckill.feign.fallback.ProductFeignServiceFallBack;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map;
@FeignClient(name = "pingmoweb-product", fallback = ProductFeignServiceFallBack.class)
public interface ProductFeignService {
@RequestMapping("/product/brand/list")
public R list(@RequestParam Map<String, Object> params);
}
调用方手动指定远程降级策略触发熔断机制,返回熔断数据
提供方手动指定远程降级策略,返回的是默认降级数据(限流数据)(提供方配置降级相当于全局降级)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)