2012-12-10 11 views
25

मैं अक्का अभिनेताओं और वायदा जानने के लिए कोशिश कर रहा हूँ द्वारा लेकिन http://akka.io पर डॉक्स पढ़ने और http://doc.akka.io/docs/akka/2.0.2/intro/getting-started-first-java.html कर मैं अभी भी समझ के साथ कुछ समस्याएं आ रही हैं के बाद समझौता। मुझे लगता है कि पीआई के मूल्य की गणना करना एक चीज है जो बहुत से लोग भी संबंधित हो सकते हैं, लेकिन मुझे नहीं =)। मैंने के आसपास खोज की है लेकिन मुझे कोई भी उदाहरण नहीं मिला है जो मुझे उपयुक्त बनाता है। इसलिए मैंने सोचा कि मैं अपने कुछ वास्तविक जीवन कोड ले जाऊंगा और इसे यहां फेंक दूंगा और अक्का के साथ ऐसा करने के उदाहरण के लिए इसका आदान-प्रदान करूंगा।अक्का अभिनेताओं और वायदा: उदाहरण के

ठीक है तो यहाँ हम चले:

मैं एक जावा play2 आवेदन जहां मैं अपने elasticsearch उदाहरण में मेरी DB और यह सूचकांक से कुछ डेटा लेने की जरूरत है।

  1. मैं डीबी को कॉल करता हूं और स्थानों के लिए आईडी प्राप्त करता हूं।

  2. मैं फिर सूची को विभाजित करता हूं और कुछ कॉल करने योग्य इंडेक्सस्क बनाता हूं।

  3. इसके बाद मैं उन सभी कार्यों का आह्वान करता हूं जहां प्रत्येक कार्य डीबी से निर्दिष्ट आईडी के लिए स्थान एकत्र करता है।

  4. प्रत्येक स्थान के लिए यह elasticsearch उदाहरण के लिए सूचकांक और इसे खोजने योग्य बनाते हैं।

  5. हो गया।

Application.java:

public class Application extends Controller { 

    private static final int VENUE_BATCH = 1000; 
    private static int size; 

    public static Result index() { 

     List<Long> venueIds = DbService.getAllVenueIds(); 
     size = venueIds.size(); 
     Logger.info("Will index " + size + " items in total."); 
     ExecutorService service = Executors.newFixedThreadPool(getRuntime().availableProcessors()); 
     int startIx = 0; 
     Collection<Callable<Object>> indexTasks = new ArrayList<Callable<Object>>(); 
     do { 
      int endIx = Math.min(startIx + VENUE_BATCH, size); 
      List<Long> subList = venueIds.subList(startIx, endIx); 
      VenueIndexTask indexTask = new VenueIndexTask(subList); 
      indexTasks.add(indexTask); 
     } while ((startIx += VENUE_BATCH) < size); 

     Logger.info("Invoking all tasks!"); 
     try { 
      service.invokeAll(indexTasks); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     return ok(index.render("Done indexing.")); 
    } 
} 

VenueTask:

public class VenueIndexTask implements Callable<Object> { 

    private List<Long> idSubList; 

    public VenueIndexTask(List<Long> idSubList){ 
     this.idSubList = idSubList; 
     Logger.debug("Creating task which will index " + idSubList.size() + " items. " + 
       "Range: " + rangeAsString() + "."); 
    } 

    @Override 
    public Object call() throws Exception { 
     List<Venue> venues = DbService.getVenuesForIds(idSubList); 
     Logger.debug("Doing some indexing: "+venues.size()); 

     for(Venue venue : venues) { 
      venue.index(); 
     } 
     return null; 
    } 
    private String rangeAsString() { 
     return "[" + idSubList.get(0) + "-" + idSubList.get(idSubList.size() - 1) + "]"; 
    } 
} 

स्थान:

@IndexType(name = "venue") 
public class Venue extends Index { 

    private String name; 

    // Find method static for request 
    public static Finder<Venue> find = new Finder<Venue>(Venue.class); 

    public Venue() { 
    } 

    public Venue(String id, String name) { 
     super.id = id; 
     this.name = name; 
    } 

    @Override 
    public Map toIndex() { 
     HashMap map = new HashMap(); 
     map.put("id", super.id); 
     map.put("name", name); 
     return map; 
    } 

    @Override 
    public Indexable fromIndex(Map map) { 
     if (map == null) { 
      return this; 
     } 
     this.name = (String) map.get("name"); 
     return this; 
    } 
} 

तो आप सभी अक्का लोग वहां पागल हो जाते हैं! और कृपया जितना संभव हो उतना करें, कूल वायदा कार्यक्षमता का प्रस्ताव दें जिसका उपयोग किया जा सकता है या कोई अन्य ज्ञान/कोड जिसे मैं इस सामान को जानने के लिए उपयोग कर सकता हूं।

+1

यह एक अच्छा सवाल है, लेकिन यह codereview.stackexchange.com पर बेहतर हो सकता है –

उत्तर

20

मैं कैसे अक्का (या किसी अन्य संदेश आधारित सिस्टम) के बारे में सोचना चाहते एक कन्वेयर बेल्ट की तरह सोचने की, कारखानों में की तरह है। अभिनेताओं में सोचने का एक सरल तरीका पिज्जा आदेश ले सकता है।

  • आप, भूख ग्राहक (अभिनेता/भूमिका) भेजता है एक आदेश (एक संदेश) पिज्जा की दुकान

  • ग्राहक सेवा (अभिनेता/भूमिका) के लिए अपने आदेश लेता है, आप संख्या देता है (भविष्य)

  • यदि आप अधीर थे, तो आप अपने पिज्जा (एक तुल्यकालिक/अवरुद्ध लेनदेन) तक फोन/इंटरनेट/दुकान पर इंतजार कर सकते थे अन्यथा आप आदेश संख्या से चेक-अप से खुश होंगे बाद में (गैर-अवरुद्ध)

  • ग्राहक सेवा रसोई प्रबंधक (अभिनेता) की देखरेख में शेफ (अभिनेता) को संदेश भेजती है। पदानुक्रम के साथ यह एक बहुत ही प्रक्रिया भारी रसोईघर है। अक्का उसे पसंद करता है। देखें Supervision

  • शेफ एक नया पिज्जा बनाता है और आदेश के विवरण (एक नया संदेश) संलग्न करता है और डिलीवरी प्रबंधक (पर्यवेक्षक अभिनेता) के माध्यम से डिलीवरी लड़का (अभिनेता) को पास करता है।

  • इस प्रक्रिया के दौरान, आपके ऑर्डर विवरण नहीं बदले हैं, यह एक दुःस्वप्न होगा। यदि आप सादे पनीर चाहते थे तो आप खुश नहीं होंगे अगर आपको पेपरोनी थी! सभी संदेश अपरिवर्तनीय होना चाहिए! हालांकि, यह हो सकता है कि विभिन्न कलाकारों के लिए संदेश अलग हो सकता है। एक डिलीवरी लड़का एक पिज्जा और ऑर्डर विवरण संलग्न करेगा, शेफ एक आदेश की उम्मीद करेगा। जब किसी संदेश को बदलने की आवश्यकता होती है, तो एक नया संदेश बनाया जाता है।

  • प्रत्येक अभिनेता एक भूमिका में अच्छा है, तो एक व्यक्ति को सभी कार्यों को करने के लिए कितना प्रभावी होगा? ऐसा हो सकता है कि कुछ अभिनेता अन्य नंबरों (शेफ के लिए ईके 10 धागे, डिलिवरी लड़कों के लिए 2, 1 ग्राहक सेवा)।

  • अवरोध व्यवहार एक दर्द है, कल्पना करें कि ग्राहक सेवा अगले ग्राहक को देखने से पहले शेफ और डिलीवरी लड़के की प्रतीक्षा कर रही है?

उम्मीद है कि मैं तुम्हें एक छोटे से मदद की है, यह एक बहुत बड़ा विषय है और मन की बड़ी परिवर्तन है। शुभकामनाएं

1

Coursera वर्तमान में प्रतिक्रियाशील प्रोग्रामिंग पर एक कोर्स चलाता है जिसमें अक्का और अभिनेता मॉडल पर 3 अंतिम व्याख्यान हैं। इसमें वीडियो व्याख्यान और गृहकार्य शामिल है (स्कैला में हालांकि जावा नहीं)। जबकि आप पूर्ण प्रमाणपत्र प्राप्त करने में बहुत देर हो चुकी हैं, आप अभी भी पाठ्यक्रम में शामिल हो सकते हैं और केवल पिछले तीन सप्ताह की जांच कर सकते हैं।

https://class.coursera.org/reactive-001/class