以下代碼構建一個以噴口開始的拓撲。在此,TenderEventSpout2
是一個Akka演員。帶Akka Actors的Storm拓撲生成器
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;
}
}
這編譯成功,但我得到這個錯誤:
You cannot create an instance of [org.quadrisk.toplogy.TenderEventSpout2] explicitly using the constructor (new). You have to use one of the 'actorOf' factory methods to create a new actor. See the documentation.
但是創建使用actorOf一個演員的建議將返回我的目標ActorRef類型。我該如何解決這個問題。提前致謝。
我不確定..你試過簡單的演員嗎?如果演員不工作,您可以使用兩個類而不是一個,並向您的噴口類中添加一個「ActorRef」成員變量。 –
@ MatthiasJ.Sax簡單的投射不起作用。所以遵循你的第二個建議。有用 ! –