Java 风暴崩塌

Java 风暴崩塌,java,groovy,apache-storm,Java,Groovy,Apache Storm,我们正在使用的螺栓都基于BaseBasicBolt,它应该确保execute的输入元组在默认情况下得到确认。在阅读文档之后,我们似乎没有做到这一点,因为在捕获异常时,元组并没有失败。假设您的拓扑结构如下所示,其中所有螺栓都是basebasicbolt: Spout -> Bolt A -> Bolt B -> Bolt C 如果螺栓B出现错误,我们现在称之为: basicOutputCollector.getOutputter().fail(inputTuple) 这是否足

我们正在使用的螺栓都基于
BaseBasicBolt
,它应该确保
execute
的输入元组在默认情况下得到确认。在阅读文档之后,我们似乎没有做到这一点,因为在捕获异常时,元组并没有失败。假设您的拓扑结构如下所示,其中所有螺栓都是
basebasicbolt

Spout -> Bolt A -> Bolt B -> Bolt C
如果螺栓B出现错误,我们现在称之为:

basicOutputCollector.getOutputter().fail(inputTuple)

这是否足以确保螺栓B的故障将导致在B发生故障的元组被踢出拓扑?

我认为“踢”这个词不合适。如果你在整个链中锚定元组

Spout -> Bolt A -> Bolt B
然后螺栓B中的
fail()
方法将具有调用喷口中的方法
fail()
的效果。speut
fail()
方法将接收刚刚失败的元组的根元组的ID。例如,根元组是第一个从喷口出来的元组,它产生了一系列新元组,其中包括螺栓B中的失败元组

root tuple -> tuple A -> tuple B
这取决于你做些什么,或者什么都不做。但问题是,失败的元组可能会在链中留下不想要的轨迹。例如,元组A可以导致对螺栓A中的计数器进行更新,但在螺栓B中的元组B失败后,该更新现在可能无效

所以我想说的是,在这种情况下,元组不能从拓扑中踢出,因为在某种意义上它已经通过了(部分)