Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin Vert.x反应式卡夫卡客户端:编写时链接不起作用?_Kotlin_Rx Java_Vert.x - Fatal编程技术网

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注意到我的另一个愚蠢错误。