2009-10-17 29 views
9

Từ hiểu biết của tôi NServiceBus thực thi phương thức Xử lý của IMessageHandler trong một giao dịch, nếu một ngoại lệ lan truyền ra khỏi phương thức này, thì NServiceBus sẽ đảm bảo thông điệp được đặt lại trên hàng đợi thông báo (lên X số lần trước hàng đợi lỗi) vv .. vì vậy chúng tôi có một hoạt động nguyên tử để nói.NServiceBus và NHibernate - Trình xử lý tin nhắn và giao dịch

Bây giờ khi nếu tôi bên trong phương pháp Xử lý NServiceBus tin nhắn của tôi, tôi làm điều gì đó như thế này

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() 
} 

ảnh hưởng của này trên phạm vi giao dịch là gì? Trans1 bây giờ được tính là một giao dịch lồng nhau về mối quan hệ của nó với giao dịch Nservicebus ngay cả khi chúng ta không làm gì để kết hôn với họ? (nếu không liên kết với giao dịch của NServiceBus như thế nào?

Nhìn vào khối thứ hai (trans2), nếu tôi bỏ ghi chú lệnh ném, giao dịch NServiceBus cũng sẽ quay lại trans1 không? ở trên vào một giao diện điều khiển ứng dụng, sau đó trans1 là độc lập, cam kết, đỏ mặt và sẽ không rollback.Tôi đang cố gắng để làm rõ những gì xảy ra bây giờ chúng tôi ngồi trong giao dịch của người khác như NServiceBus? im sẽ không làm việc trực tiếp với phiên, giống như thông qua mẫu uow

Trả lời

7

Nếu bạn đánh dấu điểm cuối là giao dịch (.MsmqTransport(). IsTransactional (true) hoặc chỉ AsA_Server) thì giao dịch sẽ tranh thủ vào một NServiceBus mở ra. Điều này có nghĩa là các cam kết mà bạn có bên trong trình xử lý của bạn sẽ không thực sự xảy ra và toàn bộ điều sẽ cam kết hoặc quay lại với nhau - trừ khi bạn nói cụ thể các giao dịch của bạn không tham gia vào giao dịch môi trường xung quanh.

Có hay không bạn làm việc trực tiếp với phiên hoặc qua UoW, có vẻ như bạn muốn làm nhiều hơn một cho một thư nhất định - tại sao? Tin nhắn đã là UoW tự nhiên.

Các vấn đề liên quan