package com.alibaba.rocketmq.storm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import storm.trident.Stream;
import storm.trident.TridentTopology;
import storm.trident.operation.BaseFilter;
import storm.trident.tuple.TridentTuple;
import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.generated.StormTopology;
import backtype.storm.tuple.Fields;
import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.storm.domain.RocketMQConfig;
import com.alibaba.rocketmq.storm.internal.tools.ConfigUtils;
import com.alibaba.rocketmq.storm.trident.RocketMQTridentSpout;
/**
* @author Von Gosling
*/
public class TransactionalTopologyDemo {
public static final Logger LOG = LoggerFactory
.getLogger(TransactionalTopologyDemo.class);
private static final String PROP_FILE_NAME = "mqspout.test.prop";
public static StormTopology buildTopology() throws MQClientException {
TridentTopology topology = new TridentTopology();
Config config = ConfigUtils.init(PROP_FILE_NAME);
RocketMQConfig rocketMQConfig = (RocketMQConfig) config.get(ConfigUtils.CONFIG_ROCKETMQ);
RocketMQTridentSpout spout = new RocketMQTridentSpout(rocketMQConfig);
Stream stream = topology.newStream("rocketmq-txId", spout);
stream.each(new Fields("message"), new BaseFilter() {
private static final long serialVersionUID = -9056745088794551960L;
@Override
public boolean isKeep(TridentTuple tuple) {
LOG.debug("Entering filter...");
return true;
}
});
return topology.build();
}
public static void main(String[] args) throws Exception {
Config conf = new Config();
LocalCluster cluster = new LocalCluster();
cluster.submitTopology(String.valueOf(conf.get("topology.name")), conf, buildTopology());
Thread.sleep(5000);
cluster.shutdown();
}
}