Twitter风暴,为什么螺栓没有接收喷口发送的东西

时间:2014-06-25 15:58:50

标签: java apache-storm

我在项目中使用Twitter Storm,我有一个奇怪的问题。 我有一个带有以下nextTuple代码的喷口:

public void nextTuple()
{
    HashMap cluster = this.databaseManager.getCluster();
    System.out.println("emitted: " + cluster);
    this.collector.emit(new Values(cluster));
}

使用以下执行连接到此喷口的螺栓:

public void execute(Tuple tuple)
{
    HashMap<String, List<String>> unigrams = (HashMap)tuple.getValueByField("unigrams");
    System.out.println("received: " + unigrams);
}

发出的东西应该与收到的东西相同吗? 所以首先输出显示:

emitted: {218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}
received: {218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}

(数据意味着什么不重要,重点是发射和接收它)。 但是,当发射变化时,收到的是相同的:

emitted: {13788873=[aa2ec732b5b64b25be81abe79d2176bb], 2293158=[aa2ec732b5b64b25be81abe79d2176bb], 218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}
received: {218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}

我正在敲打为什么它在第二种情况下不起作用。 此外,输出从nextTuple打印的次数远多于执行时的输出。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

我发现找到的唯一解决方案是在发送之前将HashMap转换为字符串,然后将其转换回螺栓中的HashMap。