【问题标题】:Chronicle queue bookmarking编年史队列书签
【发布时间】:2021-07-08 13:01:49
【问题描述】:

我有一种情况,我需要在一个线程中获取队列的结束索引,然后在稍后的某个时间点从另一个线程继续读取它。

如果是同一个线程,这将是微不足道的。我只需创建一个tailer,移动到结尾,然后在我准备好时从该tailer 开始阅读。

文档指出,使用来自多个线程的尾部将导致未定义的行为。我认为使用 .createTailer().direction(FORWARD).toEnd() 在一个线程中创建一个 Tailer,然后在另一个线程中从该 Tailer 中读取将违反合同。如果没有,请告诉我,因为这是最简单的解决方案。

我尝试做的是:

bookmarkTailer = queue.createTailer().direction(FORWARD).toEnd();
bookmarkIndex = bookmarkTailer.index(); //Left open to ensure file doesn't expire

doAsync(()-> {
  tailer = queue.createTailer();
  if (!tailer.moveToIndex(index)) {
    //fail
  }
}

但是 moveToIndex() 调用总是失败。

【问题讨论】:

    标签: multithreading chronicle


    【解决方案1】:

    最简单的恢复tailer是使用命名的tailer。

    tailer = queue.createTailer("my-name");
    

    您可以随时重新创建它,它将从原来的位置继续。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多