我们有一个与 MariaDB 数据库交互的风暴拓扑。我们的 Bolt 实现了IRichBolt
接口并覆盖了生命周期方法。我们在我们的方法中打开一个数据库连接并在prepare
方法中关闭它cleanup
。cleanup
方法文档说:
当 IBolt 将要关闭时调用。没有保证会调用清理,因为主管杀死了集群上 -9 的工作进程。保证调用清理的一种情况是在本地模式下运行 Storm 时终止拓扑
该kill -9
命令会在不清理任何资源的情况下终止该进程。所以我们得出这样的结论,即在终止拓扑时,没有必要cleanup
调用该方法并关闭数据库连接。
所以继续我的问题,我们有一个用于拓扑部署的 shell 脚本,它在执行时会以 0 的超时时间终止当前拓扑并部署一个新的拓扑。我们在数据库级别面临一个问题,即打开了许多连接,这提示我们以前的连接没有关闭。(在上一个拓扑中打开的那个)。
我们的假设正确吗?增加超时会清理所有资源吗?