问题标签 [chronicle-queue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
chronicle-queue - Chronicle Queue - StoreListener 何时触发
重庆:4.5.27。
我创建了 2 个编年史,其中一个用于写入(单线程)和其他读取器(N 个线程)使用单个 ChronicleReader 读取同一文件。
}
何时以及多少次为 Reader 调用 StoreFileListener onRelease(N 线程与他们自己的 tailer)?一开始我注册了一些感兴趣的读者,一旦我收到相同数量的发布信号,我将文件标记为删除。但我已经看到 onAcquired 和 onReleased 在 Reader 的同一个文件上多次出现。
我所理解的 onReleased 应该只在完全读取编年史文件时发生一次。
我可以使用同一个 ChronicleReader 进行多次读取吗?如果我在同一个编年史中有多个阅读器,我将获得多少个发布事件?是否也有可能一个文件被阅读器释放,但作家仍然在同一个文件上写?
chronicle - 从我所在的位置开始进程队列?
我已经开始玩 Chronicle 了,我写了一个过程,基本上听 Chronicle 队列并用它做一些事情。所以每次重新启动时,它都会重新处理文件中的所有事件......我想知道最好的方法是什么,这样我就可以坚持我处理过的地方并从那里开始?就像您建议我们如何坚持“索引”一样,有没有办法快进?
log4j2 - 编年史队列 + log4j2 异步记录器
我使用 log4j2 2.10.0 并具有以下代码:
cq4 和日志都写入同一个目录。
在日志中,它爆炸得很好,直到我看到
有某种 IO 操作使它延迟了 6 秒。
我对磁盘、挂载等知之甚少。如果我注释掉 writeText,这会消失,但我不知道这是编年史问题还是 log4j2。
我的 log4j2 参数是
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -DAsyncLogger.RingBufferSize=65536*65536 -DAsyncLogger.WaitStrategy=Sleep -Dlog4j2.AsyncQueueFullPolicy=丢弃 -Dlog4j2.DiscardThreshold=INFO
这是分析器显示的内容
谢谢!!
chronicle-queue - 编年史队列:StoreFileListener 多个 onAcquired 和 onReleased
我正在使用编年史 4.5.27。
下面是使用 StoreFileListner 的 Writer 和 Reader 的简单实现。在阅读器中,我收到了多个 onAcquired 和 onReleased 事件。
为什么会发生这种情况?我预计只会收到一份 Acquire(获取文件以供读取时)和一份 Release(读取完成后)。
在 Reader 的以下日志中,一次可以看到多个 onAcquired 和 onReleased 事件。
请注意,此行为是随机的。另请注意 Writer 已通过 Jvm.pause 故意减慢速度,以模拟数据可能无法连续使用的真实系统。
作家输出:
2018-01-03 09:36:00.079:主要 onAcquired 调用文件:C:\Logs\ChronicleData\marketdata\20180103-0936.cq4for 周期:25249536
2018-01-03 09:37:00.098:主要 onReleased 调用文件:C:\Logs\ChronicleData\marketdata\20180103-0936.cq4for 周期:25249536
阅读器输出:
2018-01-03 09:36:00.065:主要 onAcquired 调用文件:C:\Logs\ChronicleData\marketdata\20180103-0936.cq4for 周期:25249536
2018-01-03 09:36:00.075:主要 onReleased 调用文件:C:\Logs\ChronicleData\marketdata\20180103-0936.cq4for 周期:25249536
2018-01-03 09:36:00.078:主要 onAcquired 调用文件:C:\Logs\ChronicleData\marketdata\20180103-0936.cq4for 周期:25249536
2018-01-03 09:36:00.082:主要 onReleased 调用文件:C:\Logs\ChronicleData\marketdata\20180103-0936.cq4for 周期:25249536
2018-01-03 09:36:00.086:主要 onAcquired 调用文件:C:\Logs\ChronicleData\marketdata\20180103-0936.cq4for 周期:25249536
2018-01-03 09:37:00.103:主要 onReleased 调用文件:C:\Logs\ChronicleData\marketdata\20180103-0936.cq4for 周期:25249536
java - 在 ChronicleQueue 中如何理解文件读取是否完成,在 onRelease 方法中
我有一个编年史阅读器(ExcerptTailer
),代码如下,
我实现了onRealease
删除已完成文件的方法。但我的问题是queue.close()
由于方法内部的代码,文件在调用时被删除onRelease
。在这种情况下,我怎么能理解文件读取没有在里面完成onReleased
?还是有更好的方法来实施我的案例?
java - 多线程附加程序队列上的慢队列尾部
我有多个线程正在写入同一个队列的场景。
Appender 线程接收来自不同市场(每个线程单个市场)的更新并将这些数据推送到同一个队列中:
然后我有完全独立的进程(不同的JVM)通过执行从队列中连续读取:
但是当我每秒生成大约 10 次队列更新时,tailer 进程大约每 3 秒处理一条记录。我想我在这里遗漏了一些基本的东西:-)
或者持续监听队列更新的正确方法是什么?除了while (true) then do...之外,我找不到任何其他解决方案...
我正在 18 核机器(36 个线程)上开发并使用 Java Affinity 将每个工作分配给它自己的 CPU。
感谢您的任何提示。
chronicle - 是否有不使用循环的轻量级版本的 Chronicle Queue?
我想使用Chronicle Queues作为用户消息的收件箱,我的应用程序的每个用户都有自己的队列。但是,我面临以下“问题”:
由于每个用户的消息数量并不多,因此单个用户的所有消息都可以存储在单个队列文件中而无需循环。如何禁用骑自行车?
如果可以禁用循环,是否可以将整个队列存储在单个文件中,而不是包含单个队列文件和 directory-listing.cq4t 的目录?
在我的带有 EXT4 文件系统的 Linux 操作系统上,一个空队列使用 83.9Mb 的磁盘空间。这可以减少到只占用内容的大致大小吗?
如果无法规避一个或多个给定问题,是否有另一种方法可以使用 Chronicle Queues 实现用户收件箱,例如子队列或其他?
chronicle - 我们可以更改编年史队列数据文件的名称吗?
当我使用 OpenHFT/Chronicle-Queue 时,它会在队列中创建名称格式为今天日期的数据文件。
例如:20180113.cq4
我们可以更改此文件命名约定吗?
java - 读取 byte[] 编年史队列
我正在尝试编写一个我知道数组大小的字节数组,但是我无法解析结果数据。
我正在使用以下代码:
和
我希望有填充,但我不知道有多少。任何见解将不胜感激。
chronicle - 编年史队列中的订阅者顺序是否有保证?
我在看编年史,我不明白一件事。
举个例子——我有一个写者的队列——市场数据提供者在它们出现时写入分时数据。假设队列有 10 个读取器 - 每个读取器是读取新报价的不同交易策略,并可能发送买入或卖出订单,我们将它们命名为 Strategy1 .. Strategy10。假设有一条规则,我在任何给定时间只能进行一笔交易。
现在的问题 - 据我了解,无法保证这些订阅的读者如何处理 tick 事件的顺序。每个策略都订阅了队列,因此每个策略都将异步获取新的刻度。
因此,当我第一次运行它时,可能是 Strategy1 先收到报价并下订单,然后所有其他策略都无法下订单。
如果我要重播相同的事件序列,则可能是不同的策略首先处理滴答,然后下订单。
当使用相同的初始事件序列时,这将导致完全不同的结果。
我是不是理解错了,或者这真的是这样吗?这个问题有哪些可能的解决方案?
我想要实现的是相同的源事件(报价)序列总是产生相同的交易序列。