自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

aty

虽有嘉肴,弗食,不知其旨也;虽有至道,弗学,不知其善也。是故学然后知不足,教然后知困。知不足,然后能自反也;知困,然后能自强也。

  • 博客(15)
  • 资源 (1)
  • 收藏
  • 关注

原创 guava-retrying重试工具库: Retryer.call()使用注意事项

前面我们介绍了如何通过RetryerBuilder构造一个Retryer对象,现在我们学习下如何使用 Retryer.call()。这个API很重要,对于这个方法的入参、返回值、可能抛出的异常要了解清楚。入参:很简单,就是一个实现了业务逻辑的Callable对象;返回值:某次尝试成功后,Callable的返回值。我们主要关注下可能的异常:RetryException和ExecutionException。ExecutionException产生:传入的Callable执行过程中产生了异常,但是我们在构建Re

2016-12-27 14:17:07 13513

原创 guava-retrying重试工具库: AttemptTimeLimiter

AttemptTimeLimiter和guava的TimeLimiter基本是一样的,是为了限制某个任务的执行时间。比如我希望一个Callable任务执行时间不超过5s,如果超过抛异常TimeoutException。

2016-12-27 13:59:25 2920

原创 guava-retrying重试工具库: RetryListener

当发生重试之后,假如我们需要做一些额外的处理动作,比如发个告警邮件啥的,那么可以使用RetryListener。每次重试之后,guava-retrying会自动回调我们注册的监听。可以注册多个RetryListener,会按照注册顺序依次调用。

2016-12-27 13:26:59 5329 2

原创 guava-retrying重试工具库: 阻塞策略BlockStrategy

什么是阻塞策略呢?通过前面的学习,我们知道guava-retrying是可以设置2次重试的时间间隔的。比如第一次失败后,需要等待200ms再开始第二次尝试,也就是说线程需要等待200ms。实现200ms等待有多种方式,比如通过sleep方式,比如通过自旋的方式,比如锁、wait等多种控制手段,这其实就是并发策略。guava-retrying默认是使用睡眠方式来实现阻塞的。

2016-12-27 13:14:16 3438 1

原创 guava-retrying重试工具库: 隔多长时间重试

noWait失败后立刻重试,fixedWait间隔固定时间之后重试,WaitStrategies.randomWait间隔随机时间后重试,incrementingWait增量重试,fibonacciWait按照斐波那契数列重试,exponentialWait按照指数递增(2的n次方)来重试,exceptionWait根据抛出的异常来决定等待的时间长短,join组合多个重试间隔逻辑。

2016-12-27 11:17:41 5344 1

原创 guava-retrying重试工具库: 什么时候终止

当我们重试到一定阶段的时候,需要终止重试过程,比如重试了n次或者重试了n秒等。StopStrategies.stopAfterAttempt(n):在重试了n次后终止,这个实际中最常用。StopStrategies.neverStop():从不终止,一直重试,没有什么实际用处。StopStrategies.stopAfterDelay(10, TimeUnit.SECONDS):一直重试,指定时间过后终止。guava-retrying提供了StopStrategy接口,我们可以实现自己想要的终止逻辑。

2016-12-26 20:29:54 2223

原创 guava-retrying重试工具库: 什么时候重试

retryIfException,抛出runtime异常、checked异常时都会重试,但是抛出error不会重试。retryIfRuntimeException只会在抛runtime异常的时候才重试,checked异常和error都不重试。retryIfExceptionOfType允许我们只在发生特定异常的时候才重试,比如NullPointerException和IllegalStateException都属于runtime异常。上面我们看到了重试条件都是在发生异常的时候,实际上有时候没有发生异常,但是

2016-12-26 16:32:32 4439

原创 加密算法之:对称加密与非对称加密扫盲贴

对称加密:加密(encryption)与解密(decryption)使用的是同样的密钥(secret key)。优点:算法公开、计算量小、加密速度快、加密效率高,缺点:秘钥的管理和分发非常困难,不够安全。非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(简称公钥)和私有密钥(简称私钥)。优点:安全性更高,缺点:加密和解密花费时间长、速度慢。

2016-12-25 11:08:16 10249

原创 消息摘要及其算法扫盲贴

1、无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。2、只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同。3、消息摘要是单向、不可逆的。4.好的摘要算法,没有人能从中找到“碰撞”,虽然“碰撞”是肯定存在的。即无法找到两条不同消息,但是它们的摘要相同。消息摘要保证了消息的完整性,消息摘要不需要秘钥,不存在秘钥的保管和分发问题。

2016-12-24 15:10:40 6148 3

原创 java重试工具库: 实现业务逻辑与重试逻辑的解耦

对于开发过网络应用程序的程序员来说,重试并不陌生,由于网络的拥堵和波动,此刻不能访问服务的请求,也许过一小段时间就可以正常访问了。随着重试逻辑的不断变化,上面代码会越来越复杂。而且重试逻辑,其实是各个模块是差别不大的。最近遇到2个开源项目,都是将重试代码封装成专门的工具,方便使用,比如guava-retrying和spring-retry。

2016-12-23 15:57:06 6578 2

原创 maven项目常用技巧:将依赖打包到文件夹并生产可执行的jar

maven打包依赖到文件夹,并生成可执行jar

2016-12-16 14:12:52 1634

原创 maven项目常用技巧: profile与资源过滤

一般的项目都会运行在不同的环境上,比如我们有本地环境、开发环境、测试环境、生产环境等等。这些不同的环境,必然有不同的配置。比如日志级别,开发环境我们一般设置成debug,而生产环境一般设置成warn。我们肯定不希望:手动修改项目配置文件,然后才打包发布到不同的环境。通过maven的profile和资源过滤,我们只需要在不同的环境激活对应的profile,配置信息就会自动改变,不需要我们取修改项目中的代码或者配置文件,所有变量都是定义在pom.xml中的。

2016-12-16 13:35:00 2100 1

原创 Guava Cache特性:refreshAfterWrite只阻塞回源线程,其他线程返回旧值

真正加载数据的那个线程一定会阻塞,我们希望这个加载过程是异步的。这样就可以让所有线程立马返回旧值,在后台刷新缓存数据。refreshAfterWrite默认的刷新是同步的,会在调用者的线程中执行。我们可以改造成异步的,实现CacheLoader.reload()。

2016-12-07 13:13:05 27301 1

原创 Guava Cache特性:对于同一个key,只让一个请求回源load数据,其他线程阻塞等待结果

使用Guava确实可以做到:对于同一个key,无论有多少请求,都只会允许一个线程去加载数据。但是也有一个很致命的缺陷:上面8个线程中,有一个线程实际去加载数据,其余7个线程都被阻塞了。如果能做到,当一个线程去加载数据,其余线程发现这个数据正在加载中,那么直接读取老的数据,这样就不会阻塞了。既然是缓存,读取旧一点数据也没有多大问题,却可以提高系统吞度量。

2016-12-06 19:48:44 6579 1

原创 Guava Cache之Cache接口

1、通过put或putAll手动向Cache中添加数据,guava不缓存value是null的key。我们可以在系统启动的时候,就将某些数据手动放入缓存中,这样就可以避免系统启动后,第一个用户访问缓存不能命中的情况。2、通过getIfPresent/getAllPresent/get读取缓存中的数据。3、如果明确知道某些缓存无用,我们可以通过invalidate/invalidateAll删除。4、通过调用cleanUp执行缓存清理操作,比如删除过期的key。

2016-12-06 19:06:55 5227

eclipse最常用的快捷键

这是我个人从网上整理出来的快捷键,日常很常用的列在这里。而且比较清晰,欢迎大家下载。在eclipse提高开发效率

2012-10-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除