Ich schreibe einen Adapter, um Chronik-Warteschlange in Apache Wides Remote Service Admin zu verwenden. Es funktioniert gut, wenn ich nur einen einzigen Thread verwende. Bei mehr als einem Thread erhalte ich Ausnahmen wie unten.Schreiben in eine Chronik-Warteschlange mit mehreren Threads -> java.nio.BufferOverflowException
Irgendeine Idee, was ich falsch mache?
Als Referenz dies ist mein Code: https://github.com/cschneider/rsa-chronicle-provider/blob/master/src/test/java/org/apache/aries/rsa/provider/chronicle/ChronicleProviderTest.java
Sie können die Ausnahme sehen, wenn Sie die Anzahl der Threads in dem Testamentsvollstrecker erhöhen.
Exception in thread "pool-3-thread-2" java.nio.BufferOverflowException
at net.openhft.chronicle.bytes.AbstractBytes.writePosition(AbstractBytes.java:182)
at net.openhft.chronicle.bytes.AbstractBytes.writePosition(AbstractBytes.java:29)
at net.openhft.chronicle.wire.AbstractWire.writeHeader0(AbstractWire.java:183)
at net.openhft.chronicle.wire.AbstractWire.writeHeader(AbstractWire.java:171)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreAppender.append(SingleChronicleQueueExcerpts.java:252)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreAppender.writeBytes(SingleChronicleQueueExcerpts.java:153)
at org.apache.aries.rsa.provider.chronicle.ChronicleInvocationHandler.invoke(ChronicleInvocationHandler.java:45)
at com.sun.proxy.$Proxy7.callOneWay(Unknown Source)
at org.apache.aries.rsa.provider.chronicle.ChronicleProviderTest$1.run(ChronicleProviderTest.java:87)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Oder benötigen Sie einen appender für jeden Thread. Wenn Sie einen Appender für eine Warteschlange erwerben, erhalten Sie einen lokalen Thread-Appender, den Thread sicher verwenden kann, aber wenn Sie ihn zwischen Warteschlangen übergeben, müssen Sie ihn sperren. –