Kotlin Vert.x反应式卡夫卡客户端:编写时链接不起作用?
我使用的是Kotlin Vert.x反应式卡夫卡客户端:编写时链接不起作用?,kotlin,rx-java,vert.x,Kotlin,Rx Java,Vert.x,我使用的是io.vertx.reactivex.kafka.client.producer.KafkaProducerclient。客户有一个 rxWrite函数,返回Single。但是,我需要在写操作期间记录错误(如果有)。它显然没有被处决 我已经编写了以下工作示例 test():函数,用于测试链接和日志记录 fun test(): Single<Int> { val data = Single.just(ArrayList<String>().appl
io.vertx.reactivex.kafka.client.producer.KafkaProducer
client。客户有一个
rxWrite
函数,返回Single
。但是,我需要在写操作期间记录错误(如果有)。它显然没有被处决
我已经编写了以下工作示例
test():函数,用于测试链接和日志记录
fun test(): Single<Int> {
val data = Single.just(ArrayList<String>().apply {
add("Hello")
add("World")
})
data.flattenAsObservable<String> { list -> list }
.flatMap { advertiser ->
//does not work with writeKafka
writeError(advertiser).toObservable().doOnError({ println("Error $data") })
}
.subscribe({ record -> println(record) }, { e -> println("Error2 $e") })
return data.map { it.size }
}
fun test():单个{
val data=Single.just(ArrayList().apply{
添加(“你好”)
添加(“世界”)
})
data.flattasobservable{list->list}
.flatMap{广告商->
//不适用于writeKafka
writeError(广告客户).toObservable().doError({println(“Error$data”)})
}
.subscribe({record->println(record)},{e->println(“Error2$e”)})
返回data.map{it.size}
}
writeKafka:将给定字符串写入Kafka并返回Single
fun writeKafka(param: String): Single<RecordMetadata> {
//null topic to produce IllegalArgumentException()
val record = KafkaProducerRecord.create(null, UUID.randomUUID().toString(), param)
return kafkaProducer.rxWrite(record)
}
fun writeKafka(参数:字符串):单个{
//生成IllegalArgumentException()的null主题
val record=KafkaProducerRecord.create(null,UUID.randomUUID().toString(),param)
返回kafkaProducer.rxWrite(记录)
}
writeError:始终返回一个带有相同类型错误的单错误
fun writeError(param: String): Single<RecordMetadata> {
return Single.error<RecordMetadata>(IllegalArgumentException())
}
fun writeError(参数:字符串):单个{
返回Single.error(IllegalArgumentException())
}
因此,当我调用writeKafka
时,它只打印Error2
,但如果我使用writeError
它会同时打印Error
和Error2
。看起来writeKafka
返回的单曲仍在等待结果,但为什么会打印出Error2
我是RxJava2的新手,有人能指出其中的错误吗?阅读并发布错误的堆栈跟踪非常重要,这样可以隔离问题
在本例中,看起来您从
create
中获得了IllegalArgumentException
,但没有获得任何单个
,因为相关的Kafka类return kafkaProducer.rxWrite(record)
根本不执行,实际上会使flatMap
崩溃<代码>错误从不起作用,因此只打印“Error2”。读取并发布错误的堆栈跟踪非常重要,这样可以隔离问题
在本例中,看起来您从
create
中获得了IllegalArgumentException
,但没有获得任何单个
,因为相关的Kafka类return kafkaProducer.rxWrite(record)
根本不执行,实际上会使flatMap
崩溃doon错误
永远不会生效,因此只打印“Error2”。感谢@akarnokd注意到我的另一个愚蠢错误。感谢@akarnokd注意到我的另一个愚蠢错误。