- 手艺 tags:
- github
- java published: true comments: true
Stages原先是业余时间开发的一个简单的框架,用来实现SEDA。不过现在这个库经过同事们的加强,已经用在了美味和zeen的生产环境。最近我也对开源的这个分支做了一些修改。
首先是使用更安全的线程池,现在必须指定任务积压后的策略,即RejectionHandler。用户也可以设置自己的Queue,并且指定允许的大小。这是之前应该要做但是一直没做的事情。
其次在Task上增加了一个priority属性,如果你使用的是PriorityBlockingQueue,那么任务会根据这个优先级排序。但是由于PriorityBlockingQueue是unbounded,所以请慎用这个功能。
另外,现在所有的Task都通过perf4j计时,你可以用过配置log4j打印出性能报表日志。也可以通过JMX将耗时情况发布出去,我们在生产环境里通过ganglia监控了这些数据,还是比较有参考价值的。
最后,现在jmx监控stage积压队列的功能终于实现了。我会把每个队列的pending tasks数量通过mbean暴露出来,同样可以配置监控这个数据。有了这个数据后,我们可以很明确地了解各个stage的压力情况,调整线程池的策略。