sentinel

使用springcloud整合:

1、导入依赖:
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
2、下载sentinel控制台
3、配置sentinel的控制台地址信息
4、在控制台调整参数,【默认所有的流控设置保存在内存中,重启失效】
5、每一个微服务都导入actuator,并配置
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency>

	  management:
		 endpoints:
		    web:
		      exposure:
		        include: '*'

6、增加配置类,配置流控的自定义返回结果

	@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(BizCodeEnume.TO_MANY_REQUEST.getCode(), BizCodeEnume.TO_MANY_REQUEST.getMsg());
	                httpServletResponse.setCharacterEncoding("UTF-8");
	                httpServletResponse.setContentType("application/json");
	                httpServletResponse.getWriter().write(JSON.toJSONString(error));
	            }
	        });
	    }
	}

Feign 支持

配置文件打开 Sentinel 对 Feign 的支持:
加入 spring-cloud-starter-openfeign 依赖使 Sentinel starter 中的自动化配置类生效:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

1、调用方的熔断保护:配置feign.sentinel.enabled=true
2、调用方手动指定远程服务的降级策略,服务调用被降级处理,触发我们的熔断回调方法

@Slf4j
@Component
public class SeckillFeignServiceFallback implements SeckillFeignService {
    
    @Override
    public R getSkuSeckilInfo(Long skuId) {
        log.error("熔断方法调用getSkuSeckilInfo。。。。");
        return R.error(BizCodeEnume.TO_MANY_REQUEST.getCode(), BizCodeEnume.TO_MANY_REQUEST.getMsg());
    }
}

3、超大浏览的时候,必须牺牲一些远程服务。在服务的提供方(远程服务)指定降级策略;
提供方是在运行,但是不运行自己的业务逻辑,返回的是默认的降级数据(限流的数据)

自定义受保护的资源

1、代码方式:

try (Entry entry = SphU.entry("seckillSkus")) {
  //业务逻辑
} catch(Exception e) {}

2、基于注解

 //使用该注解定义受保护资源,
 @SentinelResource(value = "getCurrentSeckillSkus", blockHandler = "blockHandler")
 
  //使用一下方法处理【返回类型需要和定义方法的返回类型一致】
  public List<SeckillSkuRedisTo> blockHandler(BlockException e) {
        log.error("资源被限流,{}", e.getMessage());
        return null;
    }

配置网关限流:

1、网关gateway服务添加依赖:

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
        <version>2.1.0.RELEASE</version>
    </dependency>

2、配置限流自定义返回:

@Configuration
public class SentinelGatewayConfig {

    public SentinelGatewayConfig() {
        GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
                R error = R.error(BizCodeEnume.TO_MANY_REQUEST.getCode(), BizCodeEnume.TO_MANY_REQUEST.getMsg());
                String errorJson = JSON.toJSONString(error);
                Mono<ServerResponse> body = ServerResponse.ok().body(Mono.just(errorJson), String.class);
                return body;
            }
        });
    }
}

3、在控制台配置参数

使用Sleuth+Zipkin服务链路追踪

为什么用:

微服务架构中,如果出现问题或异常,很难去定位,必须实现分布式链路追踪,从而达到每个请求的步骤都清晰可见,出了问题,很快定位。

在这里插入图片描述

1.docker安装zipkin服务器
docker run -d -p 9400:9400 openzipkin/zipkin

2.导入依赖
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
zipkin依赖也同时包含了sleuth,可以省略sleuth	的引用

3.添加zipkin相关配置
spring:
	application:
		name: user-server
	zipkin:
		base-url: http//192.168.1.15:9411  #zipkin服务器地址
		discoveryClientEnabled: false	  #关闭服务发现,否则springcloud 会把zipkin的url当做服务名称
		sender:
			type: web
	sleuth:
		sampler:
			probability: 1  #设置抽样采集率为100%,默认为0.1,即10%
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值