首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > Apache >

apache oro使用注意细节(并发有关问题)

2012-11-12 
apache oro使用注意细节(并发问题)背景? 距离上一篇文章已经有4个多月了,这4个多月一直在忙着做一个数据库

apache oro使用注意细节(并发问题)
背景

? 距离上一篇文章已经有4个多月了,这4个多月一直在忙着做一个数据库同步产品的代码研发和测试,现在基本运行稳定。 本文主要介绍一下,当时使用apache oro包进行正则过滤时,使用时出现的一个并发问题,排查了好几天才找到原因。希望大家使用时引以为戒,望周知。

?

过程

简单的描述下,我使用apache oro的场景: 进行数据库同步时,我们会根据定义的表名进行匹配,从binlog的数据流中提取出我们关心的表,然后进行解析,压缩,传输,写入目标库等一系列动作。?

然而在线下测试环境中,冒出一个比较异常的情况,数据没有被正常的同步到目标库(概率发生的比较小,每次jvm重启后才可能出现),一节一节的往上查,最后定位是正则匹配时出的问题。

?

原因

?

出问题的代码: (这是当时出问题的代码,犯了多个错误)

?

?

我做了个测试:

?

我也做了个类似测试,在20,30的并发度下,也没有发现failed情况。后续可以在更高的压力,更复杂的正则表达式进行匹配,估计碰撞的概率就会比较高

?

总结

正确的代码写法:

?

public RegexFunction(){        patterns = new MapMaker().softValues().makeComputingMap(new Function<String, Pattern>() {            public Pattern apply(String pattern) {                try {                    PatternCompiler pc = new Perl5Compiler();                    return pc.compile(pattern, Perl5Compiler.CASE_INSENSITIVE_MASK | Perl5Compiler.READ_ONLY_MASK);                } catch (MalformedPatternException e) {                    throw new CanalSinkException(e);                }            }        });    }

?

?

看来在使用一些三方库时要多注意一些细节,尽管你之前已经对该三方库使用已经比较久,但未必不会出问题,只不过是你的运气好与不好而已。?

?

热点排行