我正在使用实现ITrigger接口的触发器jar将数据从Cassandra发送到Kafka。
为了确保仅在某些服务器可用时才尝试向Kafka发送消息(以避免超时)-我产生了一个新线程,该线程尝试以设置的频率连接到Kafka,并在出现以下情况时更新布尔值:状态更改。
在我的Cassandra触发器的构造函数中,我为此Kafka检查器产生了一个新线程。
// Start the background thread to monitor apache health
b_array = cr.get_broker_array();
bt = new background_thread(b_array, ms, lLog);
bt.start();
我的问题是,没有任何事件可以让我知道何时重新加载主触发器。
如果触发器重新加载了
./nodetool reloadtriggers
旧线程一直在后台运行,并且不会被清除。我已经看到了一些参考资料,即使用finalize()
是一个坏主意,不应该这样做。
当前刷新触发器的唯一方法实际上是重新启动Cassandra节点-这是错误的。
将对如何实现或实现这一目标的任何投入表示赞赏。
这是我解决问题的方法。