gpt4 book ai didi

java - 如何创建 Cassandra ITrigger 析构函数?

转载 作者:行者123 更新时间:2023-12-01 19:12:17 26 4
gpt4 key购买 nike

我使用实现 ITrigger 接口(interface)的触发器 jar 将数据从 Cassandra 发送到 Kafka。

为了确保我只在某些服务器可用时才尝试向 Kafka 发送消息(以避免超时开销) - 我正在生成一个新线程,尝试以设定的频率连接到 Kafka 并更新 boolean 值,以防万一状态更改。

在 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重新加载触发

旧线程继续在后台运行并且不会被清理。我看到过一些引用资料,指出使用 finalize() 是一个坏主意,不应该这样做。

目前刷新触发器的唯一方法实际上是重新启动 Cassandra 节点 - 这是错误的。

任何有关如何实现或实现这一目标的意见将不胜感激。

最佳答案

这就是我为解决问题所做的。

  • 跟踪后台线程上收到的最后一条消息的时间。
  • 如果 15 分钟内没有收到新消息,我会将每次循环的 kafka 运行状况检查速度减慢 30 秒。
  • 如果 4 小时内没有收到新消息。我会退出健康检查循环。每次重新加载触发器时,都会启动触发器的新实例并启动新线程。 触发器/线程的较旧实例不会收到新消息。所以超时等待会杀死后台僵尸线程(这是我最初的问题)。
  • 处理新消息时,我检查后台线程的状态是否已终止,如果是的话,则启动一个新的后台线程。 (使用写锁来确保并发消息不会启动多个线程)。

关于java - 如何创建 Cassandra ITrigger 析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59464279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com