首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Storm (Java):Bolt不接收其他Bolt的元组

Apache Storm (Java):Bolt不接收其他Bolt的元组
EN

Stack Overflow用户
提问于 2017-07-25 21:40:38
回答 2查看 489关注 0票数 0

我正在使用Apache的拓扑结构:

代码语言:javascript
复制
 TopologyBuilder builder = new TopologyBuilder();   
    builder.setSpout("socketspout", new SocketSpout(IP_HOST,PORT));
    builder.setBolt("filterone", new FilterOne()).shuffleGrouping("socketspout");
    builder.setBolt("filtertwo", new FilterTwo()).shuffleGrouping("filterone");

第一个螺栓的方法是(FilteOne),这个类扩展了BaseRichBolt:

代码语言:javascript
复制
public void declareOutputFields(OutputFieldsDeclarer declarer) {
    declarer.declare(new Fields("ID1","signal1"));
}

 public void execute(Tuple input) {
    int sig;
    try {
        sig=input.getInteger(1)*2;
        System.out.println("Filter one.."+Integer.toString(sig));
        collector.emit("ack1", new Values(input.getString(0), sig));
        collector.ack(input);
    } catch (Exception e) {
        collector.fail(input);
    }
}

第二个螺栓的方法是(FilteTwo),这个类也扩展了BaseRichBolt:

代码语言:javascript
复制
public void declareOutputFields(OutputFieldsDeclarer declarer) {
}

 public void execute(Tuple input) {
    int sig;
    try {
        sig=input.getInteger(1)+1;
        System.out.println("Filter two.."+Integer.toString(sig));
        collector.ack(input);
    } catch (Exception e) {
        collector.fail(input);
    }
}

当执行程序模式本地集群时,我可以看到第一个螺栓发出元组,但第二个线程永远不会接收元组.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-25 22:39:05

解决了将过滤器一段代码从collector.emit("ack1", new Values(input.getString(0), sig));修改为collector.emit( new Values(input.getString(0), sig));的问题。

票数 0
EN

Stack Overflow用户

发布于 2017-12-28 16:43:10

该方法的收集器可以设置如下:

代码语言:javascript
复制
collector.emit(input, new Values(input.getString(0), sig));

不要忘记在方法declareOutputFields中为这个值设置字段名:

代码语言:javascript
复制
public void declareOutputFields(OutputFieldsDeclarer declarer) {
        declarer.declare(new Fields("myValue"));
    }

然后,在第二个螺栓中,尝试使用"myValue“字段获得值:

代码语言:javascript
复制
sig = input.getValueByField("myValue").getInteger(1)+1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45313961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档