- 浏览: 378727 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
u014689192:
很不错
JMX学习笔记(三)-MXBean -
focus2008:
进制转换之后,根本不会执行js代码,感觉你没有测试过吧
xss漏洞之进制转换 -
focus2008:
如何使用过滤器来处理呢?
xss漏洞之进制转换 -
1169158401:
我艹,我那天这么写,包括一些方法,然后那货说这样写不容易看懂。 ...
import static简化代码 -
AquariusM:
奢华的JVM介绍!
JMX学习笔记(三)-MXBean
有很多时候我们写的代码不是你想跑多快就能跑多快的, 因为一些陈旧的核心系统支撑不了,在此万般无奈的情况下,
调用老系统的接口,服务 就需要运维给一个可以接受的范围参考, 情景大概是这样,现实还是很难接受,明明写好的代码
还用了一些自己优化技术来使代码运行的更快, 现实都是残酷的,不那么完美的, 与其被弓虽女干,不如好好享受一番。
分享一下基于ThreadLocal限制调用频率的代码:
其中引入了commons-lang里的StopWatch计时器
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.opencfg.core.limit; import org.apache.commons.lang.time.StopWatch; /** * <p> * Frequence Utils * <p> * * <p>#ThreadSafe#</p> * * @author Opencfg Software Foundation * @since 0.0.1-SNAPSHOT * @version $Id: FrequenceUtils.java 2011-06-11 23:58:53 reymondtu $ */ public final class FrequenceUtils { /** * <p> * Limit call count in split time * </p> * * @param limitSplitTime * @param limitCount * @throws InterruptedException */ public static void limit(final long limitSplitTime, final int limitCount) throws InterruptedException { FrequenceUnit funit = threadLocal.get(); funit.limitSplitTime = limitSplitTime; funit.limitCount = limitCount; funit.watch.split(); long diffTime = funit.limitSplitTime - funit.watch.getSplitTime(); if (diffTime >= 0) { if (funit.realCount >= funit.limitCount) { funit.watch.suspend(); Thread.sleep(diffTime); funit.watch.resume(); funit.realCount = 0; } } funit.realCount++; } /** * FrequenceUnit */ private static class FrequenceUnit { FrequenceUnit() { this.watch = new StopWatch(); } long limitSplitTime; int limitCount; StopWatch watch; int realCount = 0; } private static ThreadLocal<FrequenceUnit> threadLocal = new ThreadLocal<FrequenceUnit>(){ protected synchronized FrequenceUnit initialValue() { FrequenceUnit funit = new FrequenceUnit(); funit.watch.start(); return funit; } }; }
下边是测试用例:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.opencfg.core.limit; import static org.junit.Assert.assertTrue; import org.junit.Test; /** * <p> * Frequence Utils Test * <p> * * <p>JUnit4 Test</p> * * @author Opencfg Software Foundation * @since 0.0.1-SNAPSHOT * @version $Id: FrequenceUtilsTest.java 2011-06-12 01:36:53 reymondtu $ */ public class FrequenceUtilsTest { @Test public void testLimit() throws InterruptedException { FrequenceTestClass ftc = new FrequenceTestClass(1000, 10); for(int i = 0; i < 100; i++) { ftc.method(i); } assertTrue(true); } @Test public void testLimitMutiThreads() throws InterruptedException { Thread t1 = new Thread(new FrequenceTestClass(1000, 10)); t1.start(); Thread t2 = new Thread(new FrequenceTestClass(1000, 20)); t2.start(); Thread.sleep(10000); } class FrequenceTestClass implements Runnable { final long limitTime; final int limitCount; FrequenceTestClass(final long limitTime, final int limitCount) { this.limitTime = limitTime; this.limitCount = limitCount; } public void method(int i) throws InterruptedException { FrequenceUtils.limit(limitTime, limitCount); System.out.println("tid:" + Thread.currentThread().getId() + ", i=" + i); } @Override public void run() { for(int i = 0; i < 100; i++) { try { method(i); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
发表评论
-
import static简化代码
2011-11-03 00:10 1697喜欢定义常量的哥们你伤不起啊,好处当然是大大滴,但是定义的名字 ... -
Java永远的伤-中国1927年12月31日午夜
2011-08-15 20:44 3895话说在中国1927年12月31日午 ... -
高性能的SimpleDateFormat
2011-07-18 23:35 3865以前写过一篇 , 《SimpleDateFormat性能调优》 ... -
xss漏洞之进制转换
2011-07-18 01:17 11273SQL注入的事件已经是上个世纪最令人头疼的攻击方法,21世纪又 ... -
tomcat关不掉的原因
2011-07-12 23:51 43533tomcat/bin 目录下的catalina.sh是比较常用 ... -
java调用linux命令传递参数问题
2011-05-18 02:04 10734简单的不带通配符linux命令调用非常简单,使用Runtime ... -
Java位运算的优势
2011-04-09 01:58 2294在Java中对数据的运算,有很好的规范支持,尤其是针对二进制的 ... -
Facebook BigPipe技术
2011-01-04 00:37 2694关于web应用,从html的产生,到客户端浏览器的渲染, ... -
SimpleDateFormat性能调优
2010-11-25 00:12 4218万能的SimpleDateFormat可以把java.util ... -
JMX学习笔记(三)-MXBean
2010-11-10 11:25 4996在MBean中有只要遵循以下两个规则,我们就可以在jc ... -
JMX学习笔记(二)-Notification
2010-11-07 15:25 9025Notification 通知,也可理解为消息,有通知,必 ... -
JMX学习笔记(一)-MBean
2010-10-16 16:27 13654JMX 即 Java Management Ex ... -
cookie安全
2010-07-06 01:09 4148cookie的domian,path,expires, ... -
native2ascii转换后仍然乱码
2010-04-18 17:47 1816native2ascii转换的时候如果不带-encoding ... -
JPA换进下慎用entity
2010-01-26 11:36 2630今天跟一个同事调试代码,突然发现,诸如findUser ... -
http session原理
2009-12-02 00:41 2862大家都知道session是web中在服务器端保存用户状 ... -
java中获得当前目录的各种方法
2009-09-04 11:21 14384Java本来就是跨平台的编程工具,所以当然要做跨平台的 ... -
String、StringBuffer与StringBuilder
2009-04-26 22:04 1928先不废话了,来段程序: package com.tuz; ...
相关推荐
在IT行业中,尤其是在Web开发领域,接口访问频率限制是一个至关重要的议题。这涉及到系统的稳定性和安全性,防止恶意用户通过频繁请求API接口导致服务过载。本文将深入探讨如何在Spring Boot应用中实现接口访问频率...
在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源,通常来说我们会对于服务器上的各种接口进行调用次数的限制。这是一种常见的限流(Rate Limiting)机制,旨在防止恶意的请求对服务器...
- 企业微信消息推送接口有频率限制,避免频繁调用导致账号被封禁。 - 企业微信消息的接收者可以是用户、部门或者整个企业,需要根据实际需求设置。 - 调用接口时,务必处理好错误情况,如网络异常、超时、权限...
在SpringBoot应用中,接口访问频率限制是一种常见的安全策略,用于防止恶意用户或自动化脚本对服务进行过度请求,导致服务器资源耗尽。在"SpringBoot 接口访问频率限制(二)"的主题下,我们将深入探讨如何利用Spring ...
限制请求频率,防止DDoS攻击。 综上所述,这个压缩包中的例子将涵盖HTML页面与API接口的交互、接口的管理和发布、以及前后端通信等关键点,对于理解和实现商城系统的功能具有指导意义。开发者可以通过学习和实践这...
然而,在高并发场景下,调用频率(Query Per Second, QPS)可能会成为性能瓶颈,导致请求被限制或延迟。为了解决这一问题,腾讯云提供了QPS限制优化的专用网关,旨在提高服务的稳定性和效率。 QPS限制优化专用网关...
此外,为了保证安全性,需要定期更新和管理Access Token,以及遵循钉钉的API调用频率限制。 综上所述,【钉钉消息接口调用源码】项目展示了如何结合Delphi、`xSuperObject`和`openssl`库来实现与钉钉API的高效、...
在IT行业中,API(应用程序编程接口)扮演着重要的角色,它允许不同的软件系统之间进行通信。身份证OCR API接口是其中一个常见的API类型,主要用于自动识别...同时,遵循API的使用规则和频率限制,以避免不必要的问题。
在本文中,我们将深入探讨如何使用PHP调用APISpace提供的车辆违章查询API接口。...记得在实际开发中,不仅要关注代码实现,还要注意API的使用权限、调用频率限制以及错误处理,以确保服务的稳定性和用户体验。
5. **请求限制**:API通常有调用频率限制,超出限制可能会导致请求被拒绝,需关注API文档中的相关规定。 综上所述,通过APISpace的驾驶证OCR API接口,开发者可以轻松集成驾驶证信息的自动化识别功能,提高业务流程...
同时,API调用的频率和次数也可能受到限制,需要合理管理以防止被封禁或超出配额。 总的来说,APISpace的运营商二要素API接口为PHP开发者提供了一种简便的方式来验证用户手机号码的运营商信息,从而提升应用的安全...
此外,根据百度翻译API的使用政策,要注意调用频率限制,防止因过度使用导致的账号被封禁。 在实际开发中,还可以结合其他技术,如GUI界面设计,让用户可以直接在应用中输入待翻译的文本,或者实现批量翻译文件的...
本文将详细讲解如何使用APISpace提供的手机号码归属地API接口,并展示PHP调用示例代码。 APISpace是一个综合性的API社区平台,它提供多种API服务,包括但不限于查询手机号码归属地的功能。平台会根据API的表现,如...
2. **API调用限制**:新浪对API的调用频率有规定,过度频繁的请求可能会导致IP被封禁。合理规划调用策略,避免短时间内大量请求。 3. **权限管理**:根据应用需求申请合适的权限。例如,发布状态可能需要“写入”...
同时,接口调用应限制频率,防止恶意攻击。 8. **日志记录**:为了便于调试和问题追踪,开发者通常会记录每次接口调用的详细信息,包括请求参数、响应数据以及可能出现的错误信息。 9. **测试环境与生产环境**:...
本文将详细解析"APISpace 银行卡二要素标准版 API接口 PHP调用示例代码",并介绍相关知识点。 首先,APISpace是一个综合性的API服务平台,它提供了一个中立的环境,让开发者可以查找、测试和使用各种API。这个平台...
此外,确保遵循API的调用频率限制,避免因频繁请求导致账户被锁定。 总之,通过APISpace的银行卡OCR API,我们可以利用PHP轻松地自动化处理银行卡信息的识别任务。只需正确配置和调用API,就可以集成到自己的系统中...
8. **安全性** - API密钥的管理和安全存储,防止泄露,同时要遵循API的使用条款,避免超出调用频率限制。 9. **前端架构** - 尽管项目可能较小,但依然可以学习到模块化、组织代码的技巧,比如使用立即执行函数...
8. **API调用限制**:如果存在,会说明接口调用的频率限制,防止滥用。 对于"aloudv4k"这个标签,可能是某种特定的声音输出技术或硬件设备的标识。在二次开发中,可能涉及到声音播放、录音、音效处理等功能的实现,...
例如,调用新浪的股票接口可能需要指定股票代码(如'600000'代表浦发银行)和接口URL,然后解析返回的数据获取实时价格、成交量等信息。 在Python中,我们可以创建一个函数,传入股票代码和接口地址,然后发送HTTP...