在某些容器中,编年史队列不起作用。我看到以下异常:2018-11-17 16:30:57.825 [failsafe-sender] WARN n.o.c.q.i.s.SingleChronicleQueueExcerpts $ StoreTailer-无法附加EOF,正在跳过 java.util.concurrent.TimeoutException:标头:80000000,pos:104666 在net.openhft.chronicle.wire.AbstractWire.writeEndOfWire(AbstractWire.java:459) 在net.openhft.chronicle.queue.impl.single.SingleChronicleQueueStore.writeEOF(SingleChronicleQueueStore.java:349)
我想了解为什么仅在某些虚拟机中。
注意:我们正在使用NFS文件系统
试图了解NFS中的行为
答案 0 :(得分:1)
Chronicle Queue不支持在任何网络文件系统上运行,无论是NFS,AFS,基于SAN的存储还是其他。原因是那些文件系统没有提供Chronicle Queue使用的内存映射文件所需的所有原语。
或者换句话说,Chronicle Queue使用堆外内存映射文件,并且这些文件利用基于内存映射的CAS锁,通常这些CAS操作在使用网络连接存储时在进程之间不是原子的,并且在进程之间不是原子的托管在不同的计算机上。如果您的测试有时可以在文件系统和/或OS的不同组合上运行,则可能是您的测试未经历并发竞赛,或者在NAS和OS的某些组合上进行了并发竞赛,则可能是硬件和操作系统都遵循这些CAS操作,但是,我们认为这不太可能。作为解决方案,我们创建了一个名为“编年史企业”的产品,它是一种商业产品,可以让您在使用TCP / IP的计算机之间共享队列。请联系sales@chronicle.software,以获取有关编年史企业的更多信息。
答案 1 :(得分:0)
要在计算机之间可靠地分发数据,您需要使用Chronicle Queue Enterprise。 NFS不支持机器之间的原子内存操作。