编年史队列 JSON
Chronicle Queue JSON
我目前正在尝试将某个 POJO 编组为 JSON 并将其写入输出队列。这是我正在尝试做的 运行:
object OrderExecutor {
const val OUT_PATH = "${PATH}/order-executor/out"
@JvmStatic
fun main(args: Array<String>) {
ChronicleQueue.single("${PATH}/out").use { input ->
SingleChronicleQueueBuilder.builder(Path(OUT_PATH), WireType.JSON).build().use { output->
val executor = object: AbstractProcessor(){
val consumer = output.acquireAppender().methodWriter(ExchangeOrderConsumer::class.java)
val executor = OrderExecutor(consumer)
override val inputReader: MethodReader = input.createTailer().methodReader(executor)
}
executor.run()
}
}
}
}
但是在附加到文件时出现此错误:
Caused by: java.lang.UnsupportedOperationException: todo
at net.openhft.chronicle.wire.TextWire$TextValueOut.int128forBinding(TextWire.java:1476)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueStore.intForBinding(SingleChronicleQueueStore.java:126)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueStore.writeMarshallable(SingleChronicleQueueStore.java:302)
at net.openhft.chronicle.wire.TextWire$TextValueOut.marshallable(TextWire.java:1907)
at net.openhft.chronicle.wire.ValueOut.typedMarshallable(ValueOut.java:440)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueBuilder.createStore(SingleChronicleQueueBuilder.java:265)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueue$StoreSupplier.acquire(SingleChronicleQueue.java:966)
at net.openhft.chronicle.queue.impl.WireStorePool.acquire(WireStorePool.java:53)
at net.openhft.chronicle.queue.impl.single.StoreAppender.setCycle2(StoreAppender.java:269)
at net.openhft.chronicle.queue.impl.single.StoreAppender.setWireIfNull(StoreAppender.java:432)
at net.openhft.chronicle.queue.impl.single.StoreAppender.writingDocument(StoreAppender.java:389)
at net.openhft.chronicle.queue.impl.single.StoreAppender.acquireWritingDocument(StoreAppender.java:412)
at me.oms.order.ExchangeOrderConsumerJsonMethodWriter.newExchangeOrderSingle(ExchangeOrderConsumerJsonMethodWriter.java:49)
at me.oms.order.process.OrderExecutor.created(OrderExecutor.kt:23)
at me.oms.order.process.OrderExecutorMethodReader.readOneCall(OrderExecutorMethodReader.java:64)
然后我在文档中注意到不支持基于文本的格式,包括 JSON。实现这一目标最优雅的方法是什么?我是否必须使用较低级别 API?
这里的WireType是Queue本身使用的格式,队列使用的特性JSON/TextWire不支持thread-safe等128位值
没有一种优雅的方法可以将 JSON 写入队列,但是,您不需要这样做。如果需要,您可以在阅读时将其转换为 JSON,但是在本例中您不需要,因为您还使用了方法 reader.
我目前正在尝试将某个 POJO 编组为 JSON 并将其写入输出队列。这是我正在尝试做的 运行:
object OrderExecutor {
const val OUT_PATH = "${PATH}/order-executor/out"
@JvmStatic
fun main(args: Array<String>) {
ChronicleQueue.single("${PATH}/out").use { input ->
SingleChronicleQueueBuilder.builder(Path(OUT_PATH), WireType.JSON).build().use { output->
val executor = object: AbstractProcessor(){
val consumer = output.acquireAppender().methodWriter(ExchangeOrderConsumer::class.java)
val executor = OrderExecutor(consumer)
override val inputReader: MethodReader = input.createTailer().methodReader(executor)
}
executor.run()
}
}
}
}
但是在附加到文件时出现此错误:
Caused by: java.lang.UnsupportedOperationException: todo
at net.openhft.chronicle.wire.TextWire$TextValueOut.int128forBinding(TextWire.java:1476)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueStore.intForBinding(SingleChronicleQueueStore.java:126)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueStore.writeMarshallable(SingleChronicleQueueStore.java:302)
at net.openhft.chronicle.wire.TextWire$TextValueOut.marshallable(TextWire.java:1907)
at net.openhft.chronicle.wire.ValueOut.typedMarshallable(ValueOut.java:440)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueBuilder.createStore(SingleChronicleQueueBuilder.java:265)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueue$StoreSupplier.acquire(SingleChronicleQueue.java:966)
at net.openhft.chronicle.queue.impl.WireStorePool.acquire(WireStorePool.java:53)
at net.openhft.chronicle.queue.impl.single.StoreAppender.setCycle2(StoreAppender.java:269)
at net.openhft.chronicle.queue.impl.single.StoreAppender.setWireIfNull(StoreAppender.java:432)
at net.openhft.chronicle.queue.impl.single.StoreAppender.writingDocument(StoreAppender.java:389)
at net.openhft.chronicle.queue.impl.single.StoreAppender.acquireWritingDocument(StoreAppender.java:412)
at me.oms.order.ExchangeOrderConsumerJsonMethodWriter.newExchangeOrderSingle(ExchangeOrderConsumerJsonMethodWriter.java:49)
at me.oms.order.process.OrderExecutor.created(OrderExecutor.kt:23)
at me.oms.order.process.OrderExecutorMethodReader.readOneCall(OrderExecutorMethodReader.java:64)
然后我在文档中注意到不支持基于文本的格式,包括 JSON。实现这一目标最优雅的方法是什么?我是否必须使用较低级别 API?
这里的WireType是Queue本身使用的格式,队列使用的特性JSON/TextWire不支持thread-safe等128位值
没有一种优雅的方法可以将 JSON 写入队列,但是,您不需要这样做。如果需要,您可以在阅读时将其转换为 JSON,但是在本例中您不需要,因为您还使用了方法 reader.