BlockingQueue java、Storm(分布式计算)的实现有问题吗?

BlockingQueue java、Storm(分布式计算)的实现有问题吗?,java,apache-storm,blockingqueue,Java,Apache Storm,Blockingqueue,这是我的输入喷口的代码snippt,用于将元组显示到处理节点,以便通过集群进行流处理。问题是BlockingQueue正在抛出InterruptedException private SpoutOutputCollector collector; public BlockingQueue<String> blockingQueue = new LinkedBlockingQueue<String>(); public boolean isDistributed() {

这是我的输入喷口的代码snippt,用于将元组显示到处理节点,以便通过集群进行流处理。问题是BlockingQueue正在抛出InterruptedException

private SpoutOutputCollector collector;
public BlockingQueue<String> blockingQueue = new LinkedBlockingQueue<String>();

public boolean isDistributed() {
    return true;
    }


public void open(@SuppressWarnings("rawtypes") final Map conf, final TopologyContext context,
final SpoutOutputCollector collector) {

    this.collector=collector;

}

@Override
public void nextTuple() {


    try {
        //Utils.sleep(100);
        collector.emit(new Values("Single Temperature Reading", blockingQueue.take()));
    } catch (InterruptedException e) {
        e.printStackTrace();
    }



}

public void readInputfile() throws IOException, InterruptedException{
    FileInputStream file = new FileInputStream("/home/529076/Desktop/Temperature");
    DataInputStream readDate=new DataInputStream(file);
    BufferedReader readText=new BufferedReader(new InputStreamReader(readDate));

    String line;
    String singleReading = null;
    while((line=readText.readLine())!=null){
         singleReading=line;
         blockingQueue.add(singleReading);

    }

}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
    declarer.declare(new Fields("Single Temperature Reading"));
}
下一个整数(InputStreamSpout.java:65是------->


感谢

此错误是由于以下事实造成的:BlockingQueue未在输出收集器中初始化;

在Storm中,建议在prepare()/open()方法中初始化螺栓/喷嘴字段

这是因为螺栓/喷嘴是在上载拓扑的节点上创建的:您的BlockingQueue将在那里构建。
然后,将螺栓/喷孔序列化并分发到工作节点,在那里对其进行反序列化。这种序列化/反序列化过程可能无法保留在构造螺栓/喷孔时设置的字段的所有属性。在prepare()或open()中初始化的字段不要有这个问题。

上帝,希望这也能救我!我也遇到了同样的问题!:)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:1961)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1996)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
at com.tcs.storm.test.InputStreamSpout.nextTuple(InputStreamSpout.java:65)
at backtype.storm.daemon.task$fn__3349$fn__3404.invoke(task.clj:413)
        collector.emit(new Values("Single Temperature Reading", blockingQueue.take()));