storm与spring框架集成问题

来源:互联网 发布:浙江11选5遗漏数据 编辑:程序博客网 时间:2024/06/05 09:49

storm与spring框架集成问题

                                                                                            ——by comaple.zhang

              在进行storm与spring集成时,本来想着一次就能成功,抱着很大的希望可是运行时竟然报了个java.io.NotSerializableException的异常。该异常要求被依赖注入的jar包实现序列化接口,但那些jar包都是别人开发的你不能一个一个都改掉源码才能用到项目里。

再网上找一下还真有人遇到类似的问题,具体原因是对storm的spout和bolt的生命周期理解的不够深刻。

一般来说spout/bolt的生命周期如下:
1.在提交了一个topology之后(在nimbus所在的机器), 创建spout/bolt实例(spout/bolt在storm中统称为component)并进行序列化.
2.将序列化的component发送给所有的任务所在的机器
3.在每一个任务上反序列化component.
4.在开始执行任务之前, 先执行component的初始化方法(bolt是prepare, spout是open).

因此component的初始化操作应该在prepare/open方法中进行, 而不是在实例化component的时候进行.

按照这种说法进行改造,结构该问题消失了。但接下来又有了新的问题:

Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.

这个异常网上搜索之后发现原来是由于*.xml文件编码的问题。原因是在从其他项目里或者编辑工具编辑时,在文件编码中加入了BOM头的原因,于是用notePad++打开xml文件选择去掉BOM头信息,重新进行保存即可。再次运行时一切ok。