使用Chronicle-Queue作为基于文件的FIFO队列

时间:2018-08-20 18:53:32

标签: chronicle chronicle-queue

我从帖子中了解了编年史队列: Implementing a file based queue

这是我的用例:

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

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

  1. 应使用多少个追加程序?多个线程共享一个追加程序,或者每个线程都有自己的追加程序?

  2. queue.acquireAppender()是繁重的操作吗?我应该缓存附加程序,以避免调用AcquireAppender()吗?

  3. 如果由于某种原因服务器关闭,tailer能否记住上一次成功读取的条目并继续下一个条目? (例如磨石功能)

  4. 如何清除/删除旧文件?可以使用任何API进行清除吗?

另一个不相关的问题:

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

谢谢

利昂

1 个答案:

答案 0 :(得分:0)

  

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

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

  

queue.acquireAppender()是否繁重的操作?我应该缓存附加程序,以避免调用AcquireAppender()吗?

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

  

如果由于某种原因服务器已关闭,tailer能否记住上一次成功读取的条目并继续下一个条目? (例如磨石功能)

我们建议将处理第一个队列的结果记录到另一个队列中。在此您可以记录最新索引。我们正在考虑使用此功能,而无需添加队列。

  

如何清除/删除旧文件?是否有任何API可以清除?

如果您在构建器上设置了'gui': { 'handlers': ['dev_logger'], 'level': 'INFO', 'propagate': True, }, 'gui': { 'handlers': ['apps_errors'], 'level': 'ERROR', 'propagate': True, ,则在不再需要文件时会收到通知。