Apache storm 以编程方式暂停和重新启动拓扑中的喷口

Apache storm 以编程方式暂停和重新启动拓扑中的喷口,apache-storm,Apache Storm,在这种情况下,我需要通过编程停止喷口,并在外部事件发生变化时使用更新的参数重新启动喷口。可以将此视为一个外部系统,它为我提供了一个对消息源的过期密钥访问 所以,一旦到期,我需要更新此代币并重新启动喷口。我一直在尝试使用风暴信号()来实现这一点。虽然我可以将信息输入喷口,但重新启动喷口似乎不起作用。其他选项是作为一个整体重新启动拓扑(Nimbus API?),我不想这样做。 感谢所有的指点者我将试着回答这个问题,因为我对你的情况还不太清楚 解决方案1:喷口更新令牌 如果您的喷口有一个过期令牌,用于

在这种情况下,我需要通过编程停止喷口,并在外部事件发生变化时使用更新的参数重新启动喷口。可以将此视为一个外部系统,它为我提供了一个对消息源的过期密钥访问

所以,一旦到期,我需要更新此代币并重新启动喷口。我一直在尝试使用风暴信号()来实现这一点。虽然我可以将信息输入喷口,但重新启动喷口似乎不起作用。其他选项是作为一个整体重新启动拓扑(Nimbus API?),我不想这样做。
感谢所有的指点者

我将试着回答这个问题,因为我对你的情况还不太清楚

解决方案1:喷口更新令牌

如果您的喷口有一个过期令牌,用于连接到您的数据源(例如JWT),并且需要定期更新,理想的解决方案是在令牌上添加一个过期时间戳,以便喷口可以在旧令牌即将过期时请求一个新令牌,或者,当数据源返回未经授权的错误时,让喷口请求一个新的喷口。检查时间戳应该只是一个最小的开销,所以您应该能够在每次下一次调用中执行它

解决方案2:外部流程使用风暴信号和Nimbus API

如果由于某种原因,喷口本身无法更新令牌本身,或者您不想在NeXTUPLE中进行更新,则可以考虑使用与NIMBUS API一起使用的链接(如您所链接的),并使外部进程更新凭据。p> 如果使用

激活
方法而不是
打开
方法重新连接喷口,则可以使用风暴信号将凭证发送到喷口。一旦喷口接收到凭据(当喷口更新凭据时,您可以使用它接收来自喷口的信号),就可以使用Nimbus API循环激活拓扑。Storm将在喷口上调用
deactivate
,然后调用
activate
,这样您就可以重新连接了

解决方案3:外部流程仅使用风暴信号

当喷口接收到带有更新凭据的信号时,没有什么可以阻止您让喷口循环连接,而无需触摸Nimbus API。只要让
onSignal
方法在接收新凭据时在喷口中设置一个标志(我相信onSignal与其他喷口方法在一个单独的线程中运行,因此请记住,您应该为此使用AtomicBoolean/Reference),然后签入
nextTuple
。当
nextTuple
看到该标志为true时,将其设置为false并循环连接/重新初始化喷口


如果可能的话,我倾向于解决方案1。让外部进程更新凭据会增加复杂性,并意味着您必须处理令牌更新太少或外部进程关闭等问题,以及如何处理喷口和外部进程之间的信令。

为什么喷口不在令牌作为下一次调用的一部分过期时续订令牌?更新是否必须由外部程序触发?当您说要重新启动喷口时,您的意思是什么?检查下一个喷口的每次迭代似乎都是一项开销。这更像是一个每24小时重置一次的令牌,不幸的是,源管道上没有API来检查连接是否仍然处于某种“活动”状态。因此,有一个单独的线程“信号”喷口的想法。我的意思是喷口重新启动,因为如果流通过open->nextTuple路径,我也可以重新连接!。谢谢你的回复