【发布时间】: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