2013-09-30 2 views
1

У меня есть две отдельные топологии в моем основном() методе. Я использую «для цикла», чтобы установить соответствующие соответствующие ноты и болты и представить эту топологию. каждая топология имеет отдельный набор носиков и болтов с различной логикой в ​​них.Запуск нескольких штормовых топологий в локальном режиме

Теперь я хочу динамически называть разные носики и болты. Как мне это сделать ??

код в основной метод:

public static void main(String[] args) throws InterruptedException,Exception    
    { 
    LocalCluster cluster = new LocalCluster(); 



    try{ 
     BufferedReader in=new BufferedReader(new FileReader("/home/praveen /workspace/OfferEngine/OfferListJSON.json")); 
     //ArrayList<String> content = new ArrayList<String>(); 
     String str=""; 
     String str1=""; 
     while((str1=in.readLine())!=null) 
     { 
      str = str + str1; 
     } 

     JsonParser parser = new JsonParser(); 
     JsonObject o = (JsonObject)parser.parse(str); 
     JsonObject o2 = (JsonObject)o.get("OfferData"); 

     ArrayList<String> ol = new ArrayList<String>(); 
     ol.add(o2.get("strOfferId").toString().replaceAll("^\"|\"$", "")); 
     ol.add(o2.get("strOfferId1").toString().replaceAll("^\"|\"$", "")); 

     TopologyBuilder bu = null; 
     Config config = new Config(); 
     config.setDebug(false); 

     for(String x : ol) { 
       System.out.println(x); //prints element x 
       String y="", z=""; 
       bu = new TopologyBuilder();   
       bu.setSpout(x, new Off1Spout(x).ks(), 2); 
       y = x+"2"; 
       bu.setBolt(y, new main.java.bolts.Off1Bolt()).shuffleGrouping(x); 
       z = x+"offerlimit"; 
       bu.setBolt(z, new OfferLimit()).shuffleGrouping(y); 
cluster.submitTopology(x,config,bu.createTopology()); 
       } 
    } 

    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Любой вид внушения более полезно ... спасибо что касается

+0

просто мысль, что, если создать фабрику для Spouts, которая берет тип String и на основе этого возвращает требуемый Spout .. это будет как очень простая фабрика. Но опять же, если ваше состояние увеличивается, вам нужно внести изменения в простой завод. – user2720864

ответ

1

Вы можете попробовать, если() состояние внутри для цикла для различных предложений ... Просмотреть код ниже для справки

for(String x : ol) { 
    System.out.println(x); 
// Offer 1 related Topology 
    if(x.equalsIgnoreCase("offer1")){     
     String y="", z=""; 
     bu = new TopologyBuilder();   
     bu.setSpout(); 
     y = x+"start"; 
     cluster.submitTopology(x,config,bu.createTopology()); 
    } 

//  Offer 2 related Topology 

if(x.equalsIgnoreCase("off2")){ 

     String y="", z=""; 
     bu = new TopologyBuilder();   
     bu.setSpout(x, new Off1Spout(x).ks(), 2); 
     y = x+"start"; 
     bu.setBolt(y, new off2Bolt()).shuffleGrouping(x); 
     cluster.submitTopology(x,config,bu.createTopology()); 
    } 
} 

Сколько топологий есть создать что многие, если состояние ..

Смежные вопросы