0

在某些容器盒中,编年史队列不起作用。我看到此异常:2018-11-17 16:30:57.825 [failsafe-sender] WARN nocqisSingleChronicleQueueExcerpts$StoreTailer - 无法附加 EOF,跳过 java.util.concurrent.TimeoutException:标头:80000000,位置:104666 在 net.openhft.chronicle.wire.AbstractWire.writeEndOfWire(AbstractWire.java:459) 在 net.openhft.chronicle.queue.impl.single.SingleChronicleQueueStore.writeEOF(SingleChronicleQueueStore.java:349) 在

我想了解为什么只在某些虚拟机中。

注意:我们使用的是 NFS 文件系统

试图了解 NFS 中的行为

4

2 回答 2

1

Chronicle Queue 不支持在任何网络文件系统上运行,无论是 NFS、AFS、基于 SAN 的存储还是其他任何东西。原因是那些文件系统没有为 Chronicle Queue 使用的内存映射文件提供所有必需的原语。

或者换一种说法,Chronicle Queue 使用堆外内存映射文件,这些文件使用基于内存映射的 CAS 锁,通常这些 CAS 操作在使用网络附加存储时在进程之间不是原子的,当然在托管在不同进程上的进程之间也不是原子的机器。如果您的测试有时适用于文件系统和/或操作系统的不同组合,那么您的测试可能没有遇到并发竞争,或者在 NAS 和操作系统的某种组合上,硬件和操作系统可能已经兑现然而,这些 CAS 操作,我们觉得这不太可能。作为解决方案,我们创建了一个名为 Chronicle-queue-enterprise 的产品,它是一个商业产品,可以让您使用 TCP/IP 在机器之间共享队列。请联系sales@chronicle。

于 2019-06-04T10:51:21.160 回答
0

为了在机器之间可靠地分配数据,您需要使用 Chronicle Queue Enterprise。NFS 不支持机器之间的原子内存操作。

于 2019-06-10T08:18:43.057 回答