2011-05-25 14 views
5

का उपयोग कर जॉलीवर के इवेंटस्टोर को तारों का उपयोग करना मैं JOliver's EventStore लाइब्रेरी का मूल्यांकन कर रहा हूं। विशेष रूप से, मैं इवेंटस्टोर के लिए दृढ़ इंजन के रूप में RavenDB का उपयोग करने का प्रयास कर रहा हूं। EventStore इसके लिए एक प्लगइन के साथ आता है। नोट: डेटाबेस किसी इंडेक्स (डिफ़ॉल्ट वाले के अलावा) के साथ खाली है।रैवेनडीबी पर्सिस्टेंस प्लगइन

var store = Wireup.Init() 
    .UsingRavenPersistence("EventStore", new DocumentObjectSerializer()) 
    .Build(); 

हालांकि, जब मैं अपने कार्यक्रम चलाने के लिए, मैं एक अपवाद है कि "RavenCommitByRevisionRange" अनुक्रमणिका नहीं पाया जा सका इंगित करता है मिलती है:

तारों अप की दुकान में, मैं निम्नलिखित का इस्तेमाल किया।

इवेंटस्टोर कोड के आसपास खुदाई में, मुझे लगता है कि समस्या यह होती है कि रावेनपर्सिस्टेंसइंजिन प्रारंभ नहीं किया जा रहा है। प्रारंभिक कोड RavenDB सर्वर में आवश्यक अनुक्रमणिका स्थापित करता है।

चीजों के SQL सर्वर पक्ष पर, मैंने देखा कि उदाहरण प्रोजेक्ट में वायरिंग कोड एक एक्सटेंशन विधि को कॉल करता है जिसे "InitializeStorageEngine" कहा जाता है। यह विस्तार विधि कक्षा "PersistenceWireup" से जुड़ा हुआ है। हालांकि, रावेनडीबी दृढ़ता में तार के लिए उपयोग की जाने वाली विस्तार विधि कक्षा "वायरअप" लौटाती है। तो मैं एक नया PersistenceWireup उदाहरण में मेरी wireup कोड का हिस्सा लिपटे, और कॉल करने के लिए "(.InitializeStorageEngine)" की तरह तो कर रहा था:

var store = new PersistenceWireup(
    Wireup.Init() 
     .UsingRavenPersistence("EventStore", new DocumentObjectSerializer())) 
      .InitializeStorageEngine() 
     .Build(); 

यह महान काम करता है! RavenDB डेटाबेस में अब आवश्यक अनुक्रमणिका शामिल हैं।

तो ... मेरे प्रश्न: नहीं होना चाहिए ".singingRavenPersistence (...)" बस "वायरअप" की बजाय "PersistenceWireup" का एक उदाहरण लौटाता है? या EventStore में RavenDB दृढ़ता को तारने का एक बेहतर तरीका है?

उत्तर

5

हम्म। खैर, मुझे लगता है कि कारण रावेन लागू नहीं करता है PersistenceWireup बी/सी है कि इंटरफ़ेस ISerializer विशिष्ट विधियों का खुलासा करता है जो दस्तावेज़ स्टोर कार्यान्वयन का उपयोग नहीं करते हैं। हमें शायद वायरअप में प्रारंभ करने की आवश्यकता है। मैं इसमें देख लूंगा।

हालांकि, मुझे लगता है कि आप प्रेषक को याद कर रहे हैं जो संग्रहण के बाद ईवेंट प्रेषित करेगा। क्या यह जानबूझकर था? यदि आप किसी अन्य बिंदु से प्रकाशन करने की योजना नहीं बना रहे हैं, तो सिंक्रोनस/असिंक्रोनस डिस्पैचर जोड़ें। प्रेषक वर्तमान में प्रारंभिक कॉलिंग कर रहा है।

Wireup.Init() 
.UsingRavenPersistence("EventStore", new DocumentObjectSerializer()) 
.UsingSynchronousDispatcher() 
.PublishTo(new DelegateMessagePublisher(c => PublishMessages(c)) 
.Build(); 
+0

जवाब के लिए धन्यवाद! मैं देखता हूं कि रेवेन के लिए जरूरी धारावाहिक के बारे में आपका क्या मतलब है। हां, मैंने अभी के लिए एक प्रेषक छोड़ दिया था, क्योंकि मैं एक समय में इवेंटस्टोर को एक टुकड़ा समझने की कोशिश कर रहा था। लेकिन निश्चित रूप से यह अगला कदम है। –

+0

मैंने एक PersistenceWireup उदाहरण लौटने के लिए रावेन वायरअप कोड अपडेट किया है। –

+0

आपको बहुत बहुत धन्यवाद! –

2
private IStoreEvents GetInitializedEventStore(IDispatchCommits bus) 
    { 
     return Wireup.Init() 
      .UsingRavenPersistence(BootStrapper.RavenDbEventStoreConnectionStringName) 
      .UsingAsynchronousDispatchScheduler(bus) 
      .Build(); 
    }