【问题标题】:Using Chronicle-Queue as a file based FIFO queue使用 Chronicle-Queue 作为基于文件的 FIFO 队列
【发布时间】:2018-08-20 18:53:32
【问题描述】:

我从帖子中了解了 Chronicle-Queue: Implementing a file based queue

这是我的用例:

  • 我有一个服务于 http 请求的 Web 服务器(比如 tomcat)
  • 每个请求处理都可能生成一些跟踪信息。
  • 我会将这些跟踪信息写入 Chronicle-Queue(以字节 [] 为单位,我将自己进行编组/解组,例如使用 protobuf)
  • 我将有一个专用线程来使用 tailer 从 Chronicle-Queue 中读取数据。每条消息将只处理一次,如果失败,我将有自己的重试策略将其放回队列以允许下一次尝试。

基于上述用例,我有以下问题:

  1. 应该使用多少个附加程序?多个线程共享 1 个 appender 还是每个线程都有自己的 appender?

  2. queue.acquireAppender() 是一个繁重的操作吗?我应该缓存appender以避免调用acquireAppender()吗?

  3. 如果由于某种原因服务器关闭,tailer 是否可以记住最后一个成功读取条目并继续下一个条目? (就像一个磨石功能)

  4. 如何清除/删除旧文件?有什么 API 可以进行清除吗?

还有一个无关紧要的问题:

是否可以使用 Chronicle-Queue 来实现基于文件的 BlockingQueue?

谢谢

里昂

【问题讨论】:

    标签: chronicle chronicle-queue


    【解决方案1】:

    应该使用多少个附加程序?多个线程共享 1 个 appender 还是每个线程都有自己的 appender?

    我建议你使用 queue.acquireAppender() ,它会根据需要创建 Appender。

    queue.acquireAppender() 是一个繁重的操作吗?我应该缓存appender以避免调用acquireAppender()吗?

    它不是免费的,但需要大约 100 纳秒。

    如果由于某种原因服务器关闭,tailer 是否可以记住最后一次成功读取条目并继续下一个条目? (就像一个磨石功能)

    我们建议将处理第一个队列的结果记录到另一个队列。在此您可以记录它所达到的索引。这是我们正在考虑的功能,无需添加队列。

    如何清除/删除旧文件?有什么 API 可以进行清除吗?

    如果您在构建器上设置StoreFileListener,您可以在不再需要文件时收到通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 2022-06-27
      相关资源
      最近更新 更多