首页 > 解决方案 > 如何在两个不同的线程中使用相同的 CQ

问题描述

假设我有两个线程想要使用相同的编年史队列进行通信,作者:

            SingleChronicleQueue queue_en = SingleChronicleQueueBuilder.binary(path).build();
            ExcerptAppender appender = queue_en.acquireAppender();
            ....

读者:

            SingleChronicleQueue queue_en = SingleChronicleQueueBuilder.binary(path).build();
            ExcerptTailer tailer = queue_en.createTailer();
            ...

现在当我开始我的应用程序时,我得到了:

[Thread-1] n.o.c.q.i.t.SingleTableStore             Failed to acquire a lock on the table store file. Retrying
Exception in thread "Thread-1" java.lang.NoSuchMethodError: net.openhft.chronicle.core.util.Time.sleep(JLjava/util/concurrent/TimeUnit;)V
    at net.openhft.chronicle.queue.impl.table.SingleTableStore.doWithExclusiveLock(SingleTableStore.java:153)
    at net.openhft.chronicle.queue.impl.table.SingleTableBuilder.build(SingleTableBuilder.java:111)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueBuilder.initializeMetadata(SingleChronicleQueueBuilder.java:430)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueBuilder.preBuild(SingleChronicleQueueBuilder.java:995)
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueBuilder.build(SingleChronicleQueueBuilder.java:328)
    at 
....

我可以问你如何正确地做到这一点吗?

标签: chroniclechronicle-queue

解决方案


这意味着您使用的是不兼容的corewith版本queue

我建议您使用 Chronicle-bom 来确保所有版本都经过测试。

这是一个例子

https://github.com/OpenHFT/Chronicle-Queue-Demo/tree/master/order-processor

<dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>net.openhft</groupId>
            <artifactId>third-party-bom</artifactId>
            <type>pom</type>
            <version>3.6.15</version>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>net.openhft</groupId>
            <artifactId>chronicle-bom</artifactId>
            <version>2.17.482</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>net.openhft</groupId>
        <artifactId>chronicle-queue</artifactId>
    </dependency>

推荐阅读