【发布时间】:2016-01-21 19:11:24
【问题描述】:
在运行我的拓扑时,我在backtype.storm.utils.DisruptorQueue.consumeBatchToCursor 方法中得到NullPointerExceptions,特别是在螺栓中。 Spout 被适当地执行。
Storm 的故障排除page 表示这可能是由于多个线程在 OutputCollector 上发出方法所致。但是,我看不出它与我的情况有什么关系。
这是喷口的代码:
(defspout stub-spout ["stub-spout"]
[conf context collector]
(spout
(nextTuple []
(let [channel-value (<!! storm-async-channel)]
(emit-spout! collector [channel-value])))
(ack [id]
))))
对于螺栓:
(defbolt stub-bolt ["stub-bolt"] [tuple collector]
(println "Invocation!")
(let [obj (get tuple "object")
do-some-calculations (resolve 'calclib/do-some-calculations)
new-obj (do-some-calculations obj)]
(emit-bolt! collector new-obj)))
经过一番调查,结果证明对resolve 的调用返回null(我需要在运行时resolve,因为一些计算发生在位于calclib 的宏中)。
代码在本地集群中运行正常。为什么会这样?
将不胜感激任何建议。 谢谢!
【问题讨论】:
标签: clojure nullpointerexception apache-storm core.async