1

我从帖子中了解了 Chronicle-Queue: 实现基于文件的队列

这是我的用例:

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

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

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

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

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

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

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

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

谢谢

莱昂

4

1 回答 1

0

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

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

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

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

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

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

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

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

于 2018-09-08T09:51:22.253 回答