2009-10-17 10 views
9

मेरी समझ से NServiceBus एक लेनदेन के भीतर एक IMessageHandler की हैंडल विधि निष्पादित करता है, यदि कोई अपवाद इस विधि से फैलता है, तो NServiceBus यह सुनिश्चित करेगा कि संदेश संदेश कतार (ऊपर) पर वापस रखा गया है त्रुटि कतार से पहले एक्स बार) आदि .. तो हमारे पास बोलने के लिए एक परमाणु ऑपरेशन है।NServiceBus और NHibernate - संदेश हैंडलर और लेनदेन

अब जब अगर मैं अपने NServiceBus संदेश हैंडल विधि के अंदर मैं इस

using(var trans = session.BeginTransaction()) 
{ 

    person.Age = 10; 
    session.Update<Person>(person); 
    trans.Commit() 
} 

using(var trans2 = session.BeginTransaction()) 
{ 

    person.Age = 20; 
    session.Update<Person>(person); 
    // throw new ApplicationException("Oh no"); 
    trans2.Commit() 
} 

क्या लेन-देन गुंजाइश पर इस का असर है की तरह कुछ करते हैं? क्या एन 1 सर्विसबस लेनदेन के साथ अपने संबंधों के संदर्भ में ट्रांस 1 अब घोंसला लेनदेन के रूप में गिना जाता है, भले ही हमने उनसे शादी करने के लिए कुछ भी नहीं किया है? (यदि नहीं, तो NServiceBus के लेनदेन पर एक लिंक कैसे होगा?

यदि मैं फेंक स्टेटमेंट को अनमोल करता हूं, तो क्या दूसरा ब्लॉक (ट्रांस 2) देख रहा है, क्या NServiceBus लेनदेन तब रोलबैक ट्रांस 1 होगा? मूल परिदृश्य में, मैं डंप करता हूं उपरोक्त एक कंसोल ऐप में, तो ट्रांस 1 स्वतंत्र, प्रतिबद्ध, फ्लश और रोलबैक नहीं होगा। मैं यह स्पष्ट करने की कोशिश कर रहा हूं कि अब क्या होता है हम किसी अन्य के लेनदेन में बैठते हैं जैसे कि NServiceBus?

उपर्युक्त उदाहरण कोड है, मैं सीधे यूओ पैटर्न के माध्यम से सत्र के साथ काम नहीं कर रहा हूं।

उत्तर

7

यदि आप अपना एंडपॉइंट लेनदेन के रूप में चिह्नित करते हैं (.MsmqTransport()। IsTransactional (true) या बस AsA_Server) तो लेनदेन एक NServiceBus खोला जाएगा। इसका मतलब यह है कि आपके हैंडलर के अंदर जो काम करता है वह वास्तव में नहीं होगा और पूरी चीज या तो एक साथ प्रतिबद्ध या रोलबैक होगी - जब तक कि आप विशेष रूप से अपने लेन-देन को परिवेश लेनदेन में शामिल न करें।

चाहे आप सीधे सत्र के साथ या यूओडब्ल्यू के माध्यम से काम करते हों या नहीं, ऐसा लगता है कि आप किसी दिए गए संदेश के लिए एक से अधिक करना चाहते हैं - क्यों? संदेश पहले से ही प्राकृतिक यूओडब्ल्यू है।