java推特风暴,为什么螺栓没有收到喷嘴发出的信息
我在一个项目中使用Twitter风暴,我有一个奇怪的问题。 我有一个带有以下下一个代码的喷口:
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打印的输出比从execute打印的要多得多
你知道为什么吗
# 1 楼答案
我找到的唯一解决方案是在发送之前将HashMap转换为字符串,然后在bolt中将其转换回HashMap