jmeter实现高并发测试_SpringCloud之在Zuul上实现微服务粒度的限流(jmeter模拟高并发测试吞吐量实战)...

本文介绍了一种基于内存使用情况的限流机制,并结合路由信息实现服务的流量控制策略。当系统可用内存低于阈值时,触发限流措施;同时针对不同路由采用不同的限速配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

> metrics = systemPublicMetrics.metrics();

Optional> freeMemoryMetric = metrics.stream()

.filter(t -> "mem.free".equals(t.getName()))

.findFirst();

// 如果不存在这个指标,稳妥起见,返回true,开启限流

if (!freeMemoryMetric.isPresent()) {

return true;

}

long freeMemory = freeMemoryMetric.get()

.getValue()

.longValue();

// 如果可用内存小于700*1024KB,开启流控

System.out.println("-----------------------------------freeMemory="+freeMemory);

return freeMemory < 700*1024L;

}

@Override

public Object run() {

try {

RequestContext context = RequestContext.getCurrentContext();

String key = null;

// 对于service格式的路由,走RibbonRoutingFilter

String serviceId = (String) context.get(SERVICE_ID_KEY);

if (serviceId != null) {

key = serviceId;

map.putIfAbsent(serviceId, RateLimiter.create(50));

}else {

// 对于URL格式的路由,走SimpleHostRoutingFilter

URL routeHost = context.getRouteHost();

if (routeHost != null) {

String url = routeHost.toString();

key = url;

map.putIfAbsent(url, RateLimiter.create(100));

}

}

RateLimiter rateLimiter = map.get(key);

if (!rateLimiter.tryAcquire()) {

accessTokenFail("系统繁忙,请稍后再试!");

}

} catch (Exception e) {

ReflectionUtils.rethrowRuntimeException(e);

}

return null;

}

/**

* 请求失败

* @param message

*/

public void accessTokenFail(String message){

Result result = new Result();

RequestContext ctx = RequestContext.getCurrentContext();

HttpServletResponse response = ctx.getResponse();

ctx.setSendZuulResponse(false);

result.setType(TypeEnum.FAIL.getCode());

result.setMessage(message);

result.setTrue(false);

result.setCode(TypeEnum.rateLimit.getCode());

response.setContentType("application/json;charset=UTF-8");

try {

response.getWriter().write(objectMapper.writeValueAsString(result));

}catch (Exception e){

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值