Java 在topology main方法中设置MessageTimeoutSecs时,在MSSpout中获取ClassCastException

Java 在topology main方法中设置MessageTimeoutSecs时,在MSSpout中获取ClassCastException,java,apache-storm,Java,Apache Storm,我在topology main方法中设置MessageTimeoutSecs参数 Config conf = new Config(); conf.setMessageTimeoutSecs(200); //this is a int StormSubmitter.submitTopology(args[0], conf, builder.createTopology()); 但我有一个演员错误: java.lang.ClassCastException: java.lan

我在topology main方法中设置MessageTimeoutSecs参数

 Config conf = new Config();      
 conf.setMessageTimeoutSecs(200); //this is a int 
 StormSubmitter.submitTopology(args[0], conf, builder.createTopology());
但我有一个演员错误:

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
at backtype.storm.contrib.jms.spout.JmsSpout.open(JmsSpout.java:160) ~[stormjar.jar:na]
at backtype.storm.daemon.executor$fn__6579$fn__6594.invoke(executor.clj:522) ~[storm-core-0.9.5.jar:0.9.5]
at backtype.storm.util$async_loop$fn__459.invoke(util.clj:461) ~[storm-core-0.9.5.jar:0.9.5]
at clojure.lang.AFn.run(AFn.java:24) [clojure-1.5.1.jar:na]
at java.lang.Thread.run(Thread.java:662) [na:1.6.0_22]
JmsSpout代码是:

Integer topologyTimeout = (Integer)conf.get("topology.message.timeout.secs");
// TODO fine a way to get the default timeout from storm, so we're not hard-coding to 30 seconds (it could change)
topologyTimeout = topologyTimeout == null ? 30 : topologyTimeout;

有人知道为什么吗?

似乎Storm在内部将超时值转换为
long
。不知道为什么。要解决此问题,需要强制转换为
Long
(如果需要整数,需要转换为
Integer
int


但是这个JmsSpout是storm本身提供的一个类。还有别的办法吗?我明白了。。。您可以尝试在
storm.yaml
中全局设置超时(如果这是您的一个选项并且不会影响其他拓扑)。你能向邮件列表报告这件事吗?听起来像个虫子。
Object timeout = conf.get("topology.message.timeout.secs");
Integer topologyTimeout = timeout == null ? 30 : ((Long)timeout).intValue;