通量风暴配置中的Lambda函数

时间:2018-10-11 19:15:49

标签: lambda apache-storm flux

我需要将lambda函数作为参数传递给通量YAML配置文件(由Apache Storm使用)中的构造函数或方法。

例如,假设我要创建org.apache.storm.kafka.spout.ByTopicRecordTranslator的实例。它具有一个带有以下签名的构造函数:

public ByTopicRecordTranslator(Func<ConsumerRecord<K, V>, List<Object>> func, Fields fields)

在Java中,我将这样实例化它:

ByTopicRecordTranslator<String, String> translator = new ByTopicRecordTranslator<>((K) -> new Values(K.value()), new Fields("oneOrMoreStrings"));

但是我似乎无法在助焊剂YAML配置文件中弄清楚该如何做。这是我尝试的代码,但失败了:

  - id: "field"
    className: "org.apache.storm.tuple.Fields"
    constructorArgs:
      - ["oneOrMoreStrings"]

  - id: "KafkaMessageTranslator"
    className: "org.apache.storm.kafka.spout.ByTopicRecordTranslator"
    constructorArgs:
      - (K) -> new Values(K.value())
      - ref: "field"

这是我收到的错误:

Exception in thread "main" java.lang.IllegalArgumentException: Couldn't find a suitable constructor for class 'org.apache.storm.kafka.spout.ByTopicRecordTranslator' with arguments '[(K) -> new Values(K.value()), [oneOrMoreStrings]]'.
    at org.apache.storm.flux.FluxBuilder.buildObject(FluxBuilder.java:358)
    at org.apache.storm.flux.FluxBuilder.buildComponents(FluxBuilder.java:421)
    at org.apache.storm.flux.FluxBuilder.buildTopology(FluxBuilder.java:101)
    at some.package.KafkaConsumerTestTopology.main(KafkaConsumerTestTopology.java:20)

我在flux docs中找不到任何相关信息。我相当确定这与我格式化lambda的方式有关。

如何将lambda函数作为参数传递给Flux YAML配置文件中的构造函数或方法?

0 个答案:

没有答案