package com.alibaba.rocketmq.storm.topology; import org.apache.commons.lang.math.NumberUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.StormSubmitter; import backtype.storm.generated.AlreadyAliveException; import backtype.storm.generated.InvalidTopologyException; import backtype.storm.topology.BoltDeclarer; import backtype.storm.topology.TopologyBuilder; import com.alibaba.rocketmq.storm.bolt.RocketMqBolt; import com.alibaba.rocketmq.storm.domain.RocketMQConfig; import com.alibaba.rocketmq.storm.domain.RocketMQSpouts; import com.alibaba.rocketmq.storm.internal.tools.ConfigUtils; import com.alibaba.rocketmq.storm.spout.StreamMessageSpout; import com.alibaba.rocketmq.storm.spout.factory.RocketMQSpoutFactory; public class SimpleTopology { private static final Logger LOG = LoggerFactory.getLogger(SimpleTopology.class); private static final String BOLT_NAME = "MQBolt"; private static final String PROP_FILE_NAME = "mqspout.default.prop"; private static Config config = new Config(); private static boolean isLocalMode = true; public static void main(String[] args) throws Exception { TopologyBuilder builder = buildTopology(ConfigUtils.init(PROP_FILE_NAME)); submitTopology(builder); } private static TopologyBuilder buildTopology(Config config) throws Exception { TopologyBuilder builder = new TopologyBuilder(); int boltParallel = NumberUtils.toInt((String) config.get("topology.bolt.parallel"), 1); int spoutParallel = NumberUtils.toInt((String) config.get("topology.spout.parallel"), 1); BoltDeclarer writerBolt = builder.setBolt(BOLT_NAME, new RocketMqBolt(), boltParallel); StreamMessageSpout defaultSpout = (StreamMessageSpout) RocketMQSpoutFactory .getSpout(RocketMQSpouts.STREAM.getValue()); RocketMQConfig mqConig = (RocketMQConfig) config.get(ConfigUtils.CONFIG_ROCKETMQ); defaultSpout.setConfig(mqConig); String id = (String) config.get(ConfigUtils.CONFIG_TOPIC); builder.setSpout(id, defaultSpout, spoutParallel); writerBolt.shuffleGrouping(id); return builder; } private static void submitTopology(TopologyBuilder builder) { try { if (isLocalMode == true) { LocalCluster cluster = new LocalCluster(); config.put(Config.STORM_CLUSTER_MODE, "local"); cluster.submitTopology(String.valueOf(config.get("topology.name")), config, builder.createTopology()); Thread.sleep(50000); cluster.shutdown(); } else { config.put(Config.STORM_CLUSTER_MODE, "distributed"); StormSubmitter.submitTopology(String.valueOf(config.get("topology.name")), config, builder.createTopology()); } } catch (AlreadyAliveException e) { LOG.error(e.getMessage(), e.getCause()); } catch (InvalidTopologyException e) { LOG.error(e.getMessage(), e.getCause()); } catch (Exception e) { LOG.error(e.getMessage(), e.getCause()); } } }