【问题标题】:Storm Topology Builder with Akka Actors使用 Akka Actors 的 Storm 拓扑构建器
【发布时间】:2016-05-16 10:27:30
【问题描述】:

下面的代码,构建一个从 spout 开始的拓扑。在此,TenderEventSpout2 是一个 Akka Actor。

TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("EventSpout", new TenderEventSpout2(), 1);

TenderEventSpout2 看起来像这样:

public class TenderEventSpout2 extends UntypedActor implements IRichSpout{  

    @Override 
    public void onReceive(Object message){// throws IOException {}

    @Override
    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {}

    @Override
    public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) {}

    @Override
    public void nextTuple() {}


    //Override all the interface methods
    @Override
    public void close() {}

    public boolean isDistributed() {
        return false;
    }

    @Override
    public void activate() {}

    @Override 
    public void deactivate() {}

    @Override
    public void ack(Object msgId) {}

    @Override
    public void fail(Object msgId) {}

    @Override
    public Map<String, Object> getComponentConfiguration() {
        return null;
    }

}

这编译成功,但我得到这个错误:

您不能使用构造函数(新)显式创建 [org.quadrisk.toplogy.TenderEventSpout2] 的实例。您必须使用“actorOf”工厂方法之一来创建新演员。请参阅文档。

但是按照建议使用 actorOf 创建一个演员会返回一个 ActorRef 类型的对象。我该怎么做。提前致谢。

【问题讨论】:

  • 我不确定.. 你试过简单的演员表吗?如果强制转换不起作用,您可以使用两个类而不是一个,并将ActorRef 成员变量添加到您的 spout 类中。
  • @MatthiasJ.Sax 简单的演员阵容不起作用。所以遵循了你的第二个建议。它有效!

标签: java akka apache-storm


【解决方案1】:

你需要使用两个类而不是一个:

  1. 第一个实现Actor
  2. 第二次实现IRichSpout

在您的 spout 中,添加一个 ActorRef 成员变量,它保存您通过 ActorSystem#actorOf(...) 获得的第一个类的实例。

【讨论】:

  • 你的回答很混乱。创建两个类是正确的方法,但其中一个是用于 spout,另一个是 Actor。 Actor 代理 ActorRef 应该在 spout 类中创建,它将充当 ActorWorld 的句柄。这样,将Akka Actor 包含在 spout 中或与 spout 一起使用都不会出现问题。
  • 感谢您的提示。我的错 - 我很快就给出了这个答案,没有重新考虑它。现在更新它。 (不得不承认,我不是 Akka 专家)
  • 嗯.. 感谢您的帮助。我现在将其标记为答案。
  • 您似乎对我的回答并不完全满意——在您上面的评论(即问题)中,您说“它有效”。 -- 如果我的回答有些地方不好,请指正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多