/src/jvm/org/mongodb/MongoTopology.java

https://github.com/davidpr/mongo-storm-rls · Java · 85 lines · 58 code · 14 blank · 13 comment · 0 complexity · 24628fd53da9f501716fa08ec776b655 MD5 · raw file

  1. package org.mongodb;
  2. import backtype.storm.Config;
  3. import backtype.storm.StormSubmitter;
  4. import backtype.storm.generated.AlreadyAliveException;
  5. import backtype.storm.spout.Scheme;
  6. import backtype.storm.topology.TopologyBuilder;
  7. import backtype.storm.tuple.Tuple;
  8. import com.google.gson.JsonObject;
  9. import com.google.gson.JsonParser;
  10. import com.mongodb.BasicDBObjectBuilder;
  11. import com.mongodb.DBObject;
  12. import com.mongodb.WriteConcern;
  13. import com.rapportive.storm.amqp.QueueDeclaration;
  14. import com.rapportive.storm.amqp.SharedQueueWithBinding;
  15. import com.rapportive.storm.scheme.SimpleJSONScheme;
  16. import com.rapportive.storm.spout.AMQPSpout;
  17. import org.mongodb.bolt.MongoInsertBolt;
  18. import java.util.Date;
  19. //import org.json.JSONObject;
  20. //importing the Scheme class
  21. /////rabbitmq, amqp and amqpspout includes
  22. //import com.rapportive.storm.amqp.HAPolicy;
  23. ////////////////////////////////////////////////
  24. //import org.apache.log4j.Logger;
  25. public class MongoTopology
  26. {
  27. public static void main(String[] args) throws Exception
  28. {
  29. TopologyBuilder builder = new TopologyBuilder();
  30. String url = "mongodb://127.0.0.1:27017/regression";
  31. QueueDeclaration qd = new SharedQueueWithBinding("stormqueue", "stormexchange", "stormkey", 30000, 60000, 100);
  32. Scheme scheme = new SimpleJSONScheme();
  33. builder.setSpout( "spout", new AMQPSpout("127.0.0.1", 5672, "guest", "guest", "/", qd, scheme));
  34. ////////////////////////////////////////////////////////////////
  35. //////////////////////////////BOLT DB///////////////////////////
  36. ////////////////////////////////////////////////////////////////
  37. // Mongo insert bolt instance
  38. String collectionNameOutput = "diabetesoutput";
  39. MongoInsertBolt mongoInserBolt = null;
  40. StormMongoObjectGrabber mapper3 = new StormMongoObjectGrabber() {//field mapper
  41. @Override
  42. public DBObject map(DBObject object, Tuple tuple) {
  43. Object mvalue= tuple.getValueByField("message") ;
  44. String svalue=mvalue.toString();
  45. System.out.println("svalue is: " + svalue + "\n");
  46. JsonParser parser = new JsonParser();
  47. JsonObject obj = (JsonObject)parser.parse(svalue);
  48. return BasicDBObjectBuilder.start()
  49. .add("X", obj.get("X").getAsDouble() )
  50. .add("Y", obj.get("Y").getAsDouble() )
  51. .add("V", obj.get("V").getAsDouble() )
  52. .add("timestamp", new Date())
  53. .get(); }
  54. };
  55. WriteConcern writeConcern=new WriteConcern();
  56. // Create a mongo bolt
  57. mongoInserBolt = new MongoInsertBolt(url, collectionNameOutput, mapper3, writeConcern.NONE);
  58. // Add it to the builder accepting content from the sum bolt/spout
  59. builder.setBolt("mongo", mongoInserBolt, 1).allGrouping("spout");
  60. /////////////////////////////////////////////////////////////////////////////////
  61. Config conf = new Config();
  62. conf.setDebug(true);
  63. conf.setNumWorkers(1);
  64. conf.setMaxSpoutPending(5000);
  65. try{
  66. StormSubmitter.submitTopology( args[0], conf, builder.createTopology() );
  67. }
  68. catch(AlreadyAliveException e){
  69. }
  70. }
  71. }