一、maven创建工程
mvn archetype:generate -DgroupId=com.h3c.storm -DartifactId=storm-samples -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
二、导入创建好的maven工程到eclipse,修改pom文件,加上以下部分
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>0.10.0</version>
<!-- keep storm out of the jar-with-dependencies -->
<scope>provided</scope>
</dependency>
最终的pom如下:

1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.h3c.storm</groupId> 5 <artifactId>storm-samples</artifactId> 6 <packaging>jar</packaging> 7 <version>1.0-SNAPSHOT</version> 8 <name>storm-samples</name> 9 <url>http://maven.apache.org</url> 10 <dependencies> 11 <dependency> 12 <groupId>junit</groupId> 13 <artifactId>junit</artifactId> 14 <version>3.8.1</version> 15 <scope>test</scope> 16 </dependency> 17 18 <dependency> 19 <groupId>org.apache.storm</groupId> 20 <artifactId>storm-core</artifactId> 21 <version>0.10.0</version> 22 <!-- keep storm out of the jar-with-dependencies --> 23 <scope>provided</scope> 24 </dependency> 25 </dependencies> 26 </project>
三、修改app.java 名字(当然不修改也可以)为MyFirstTopology,并写一个示例代码

1 package com.h3c.storm; 2 3 import java.util.Map; 4 import java.util.Random; 5 6 import backtype.storm.Config; 7 import backtype.storm.LocalCluster; 8 import backtype.storm.StormSubmitter; 9 import backtype.storm.spout.SpoutOutputCollector; 10 import backtype.storm.task.TopologyContext; 11 import backtype.storm.topology.BasicOutputCollector; 12 import backtype.storm.topology.OutputFieldsDeclarer; 13 import backtype.storm.topology.TopologyBuilder; 14 import backtype.storm.topology.base.*; 15 import backtype.storm.tuple.Fields; 16 import backtype.storm.tuple.Tuple; 17 import backtype.storm.tuple.Values; 18 import backtype.storm.utils.Utils; 19 20 public class MyFirstTopology { 21 22 public static class RandomSpout extends BaseRichSpout { 23 24 private SpoutOutputCollector collector; 25 26 private Random rand; 27 28 private static String[] sentences = new String[] {"kane1:I'm kane1", "kane2:I'm kane2", 29 "kane3:I'm kane3", "kane4:I'm kane4"}; 30 31 @Override 32 public void open(Map conf, TopologyContext context, 33 SpoutOutputCollector collector) { 34 this.collector = collector; 35 this.rand = new Random(); 36 } 37 38 @Override 39 public void nextTuple() { 40 String toSay = sentences[rand.nextInt(sentences.length)]; 41 this.collector.emit(new Values(toSay)); 42 } 43 44 @Override 45 public void declareOutputFields(OutputFieldsDeclarer declarer) { 46 declarer.declare(new Fields("sentence")); 47 } 48 49 } 50 51 public static class ExclaimBasicBolt extends BaseBasicBolt { 52 53 @Override 54 public void execute(Tuple tuple, BasicOutputCollector collector) { 55 //String sentence = tuple.getString(0); 56 String sentence = (String) tuple.getValue(0); 57 String out = sentence + "!"; 58 collector.emit(new Values(out)); 59 } 60 61 @Override 62 public void declareOutputFields(OutputFieldsDeclarer declarer) { 63 declarer.declare(new Fields("excl_sentence")); 64 } 65 66 } 67 68 public static class PrintBolt extends BaseBasicBolt { 69 70 @Override 71 public void execute(Tuple tuple, BasicOutputCollector collector) { 72 String rec = tuple.getString(0); 73 System.err.println("String recieved: " + rec); 74 } 75 76 @Override 77 public void declareOutputFields(OutputFieldsDeclarer declarer) { 78 // do nothing 79 } 80 81 } 82 public static void main(String[] args) throws Exception { 83 TopologyBuilder builder = new TopologyBuilder(); 84 85 builder.setSpout("spout", new RandomSpout()); 86 builder.setBolt("exclaim", new ExclaimBasicBolt()).shuffleGrouping("spout"); 87 builder.setBolt("print", new PrintBolt()).shuffleGrouping("exclaim"); 88 89 Config conf = new Config(); 90 conf.setDebug(false); 91 92 if (args != null && args.length > 0) { 93 conf.setNumWorkers(3); 94 95 StormSubmitter.submitTopology(args[0], conf, builder.createTopology()); 96 } else { 97 98 LocalCluster cluster = new LocalCluster(); 99 cluster.submitTopology("test", conf, builder.createTopology()); 100 Utils.sleep(10000); 101 cluster.killTopology("test"); 102 cluster.shutdown(); 103 } 104 } 105 }