簡體   English   中英

編年史隊列 JSON

[英]Chronicle Queue JSON

我目前正在嘗試將某個 POJO 編組為 JSON 並將其寫入 output 隊列。 這是我正在嘗試做的事情的總結:

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 不支持的功能,例如線程安全的 128 位值。

沒有一種優雅的方法可以將 JSON 寫入隊列,但是,您不需要這樣做。 如果需要,您可以在閱讀時將其轉換為 JSON,但在本例中您不需要這樣做,因為您還使用了方法閱讀器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM