【问题标题】:Handle Java method 'paused()' in Scala? [duplicate]在Scala中处理Java方法'paused()'? [复制]
【发布时间】:2018-04-28 10:06:14
【问题描述】:

我正在尝试通过 Scala 公开 Java 方法(有关原始 Java 方法的更多详细信息 - 它来自 Kafka

这是原始的Java方法:

pause(Collection<TopicPartition> partitions)

如何向 Scala 中的方法公开和传递参数,以及在这种情况下使用哪个 Scala 集合? 我有类似的东西:

import org.apache.kafka.clients.consumer.{KafkaConsumer, OffsetAndMetadata}
import org.apache.kafka.common.TopicPartition
import collection.mutable.Map
import collection.JavaConverters._

//initialise consumer:
var consumer = createKafkaConsumer(config, subscriptions)

//accept a scala.collection.mutable.Map here
def pauseMethod (topic_partition) = {
    //and then convert it to a java
    consumer.pause(topic_partition)
}

另外,如何在 Scala 中调用(并传递参数)这个方法? 谢谢。

【问题讨论】:

    标签: java scala apache-kafka


    【解决方案1】:

    听起来您将paused()pause(Collection) 混淆了。 KafkaConsumer 没有paused(Collection) 函数。您不必公开任何内容,因此只需直接调用 pause 函数即可。

    使用有限的代码示例,您可以通过以下方式暂停和检索暂停的主题

    val consumer = createKafkaConsumer(config, subscription)
    
    consumer.pause(Seq("topic1","topic2").asJava)
    println(consumer.paused().asScala)
    

    请注意,Scala 集合使用 asJava 转换为 java,Java 集合使用反函数 asScala 转换为 Scala。

    希望这是您所追求的,否则请提供一个功能最少的代码示例以及澄清问题。

    【讨论】:

    • 谢谢,我更新了问题。澄清一下 - 我对一些用 Java 制作的与 Kafka 对话的遗留代码不熟悉。现在尝试为仅使用 Scala 与 Java 和 Kafka 对话的用户添加到 Scala 库。虽然还不熟悉,但相信我所要做的就是在 Scala 中创建一个能够调用 Java 方法的方法暂停(或者直接从 Scala 到 Kafka 进行暂停,这部分我还不确定)。
    • 好的,在这种情况下,您无需执行任何特殊操作即可从 Scala 与 Java 进行交互。只需使用 JavaConverters 库将您的数据类型与 Java 相互转换(我通常喜欢在 Scala 代码中避免 Java 集合,因此我会尽快转换)。
    • 你有示例如何在 Scala 中启用调用 Java pause 方法的方法?谢谢。
    • 我原来的答案是你是怎么做的;特别是consumer.pause(Seq("topic1","topic2").asJava)。从 Scala 调用 Java 方法并没有什么特别之处。您只需要确定并传递正确的数据类型。在我的示例中,JavaConverters 库用于将 Seq 转换为 Java 集合(API 所期望的)。如果这对您不起作用,请说明您看到了什么错误。
    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多