【发布时间】:2021-02-26 15:17:41
【问题描述】:
上下文:我编写了一个接收简单消息的 Kafka Consumer,我想使用 com.mongodb.reactivestreams.client.MongoClient 将其插入 MongoDb。虽然我理解我的问题是关于如何正确使用 MongoClient 让我通知我的堆栈:我的堆栈是 Micronaut + MongoDb reactive + Kotlin。
免责声明:如果有人在 java 中提供答案,我可以将其翻译成 Kotlin。您可以忽略下面的 Kafka 部分,因为它按预期工作。
这是我的代码
package com.mybank.consumer
import com.mongodb.reactivestreams.client.MongoClient
import com.mongodb.reactivestreams.client.MongoCollection
import com.mongodb.reactivestreams.client.MongoDatabase
import io.micronaut.configuration.kafka.annotation.KafkaKey
import io.micronaut.configuration.kafka.annotation.KafkaListener
import io.micronaut.configuration.kafka.annotation.OffsetReset
import io.micronaut.configuration.kafka.annotation.Topic
import org.bson.Document
import org.reactivestreams.Publisher
import javax.inject.Inject
@KafkaListener(offsetReset = OffsetReset.EARLIEST)
class DebitConsumer {
@Inject
//@Named("another")
var mongoClient: MongoClient? = null
@Topic("debit")
fun receive(@KafkaKey key: String, name: String) {
println("Account - $name by $key")
var mongoDb : MongoDatabase? = mongoClient?.getDatabase("account")
var mongoCollection: MongoCollection<Document>? = mongoDb?.getCollection("account_collection")
var mongoDocument: Publisher<Document>? = mongoCollection?.find()?.first()
print(mongoDocument.toString())
//println(mongoClient?.getDatabase("account")?.getCollection("account_collection")?.find()?.first())
//val mongoClientClient: MongoDatabase = mongoClient.getDatabase("account")
//println(mongoClient.getDatabase("account").getCollection("account_collection").find({ "size.h": { $lt: 15 } })
//println(mongoClient.getDatabase("account").getCollection("account_collection").find("1").toString())
}
}
嗯,上面的代码是我得到的最接近的。它没有提示任何错误。正在打印
com.mongodb.reactivestreams.client.internal.Publishers$$Lambda$618/0x0000000800525840@437ec11
我想这证明代码正确连接到数据库,但我希望打印第一个文档。
共有三个文件:
我的最终目标是将我从 Kafka Listener 收到的消息插入到 MongoDb。任何线索将不胜感激。
整个代码可以在git hub找到
***在苏珊的问题后编辑
这是打印的内容
var mongoDocument = mongoCollection?.find()?.first()
print(mongoDocument.toString())
【问题讨论】:
-
“但我希望打印第一个文档”- 我认为您的代码是为打印发布者而不是文档而编写的。
-
这打印什么? var mongoDocument = mongoCollection?.find()?.first()
-
@SusanMustafa 我在打印上方添加了
标签: mongodb kotlin micronaut reactive-mongo-java