如何在两个不同的线程中使用相同的CQ

时间:2019-12-04 11:51:33

标签: chronicle chronicle-queue

让我说我有两个线程想要使用相同的Chronicle队列进行通信, 作家:

            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 
....

请问您如何正确进行操作?

1 个答案:

答案 0 :(得分:0)

这意味着您使用的corequeue的不兼容版本

我建议您使用编年史表来确保所有版本均经过测试。

以下是一个示例

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>