NServiceBus는 트랜잭션 내에서 IMessageHandler의 Handle 메서드를 실행합니다. 예외가이 메서드에서 전파되면 NServiceBus는 메시지가 메시지 큐에 다시 저장되도록합니다 (위로 X 시간 전에 오류 대기열 등) 등등. 그래서 우리는 말하기 위해 원자 적 조작을했습니다.NServiceBus 및 NHibernate - 메시지 처리기 및 트랜잭션
이제 때 트랜잭션 범위에 대한이의 효과를 이것은 무엇
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()
}
그런 짓을 내 NServiceBus 메시지 핸들 방법 내부 I 있다면? trans1은 이제 Nothing을 사용하여 NserviceBus 트랜잭션과의 관계에서 중첩 트랜잭션으로 계산됩니까? (NServiceBus의 트랜잭션에 연결하는 방법이 없다면
두 번째 블록 (trans2)을 보면 throw 문을 주석 처리하지 않으면 NServiceBus 트랜잭션이 trans1을 롤백 할 것인가? 기본 시나리오에서는 I dump 위의 콘솔 응용 프로그램에 다음 trans1 독립, 커밋, 플러시 및 롤백되지 않습니다. 우리가 NServiceBus 같은 다른 사람의 트랜잭션에 앉아 지금 무슨 일이 일어 났는지 명확히하려고 해요?
위의 코드는 단지 예제 코드이며, 인스턴트 메시징을 통해 세션과 직접 작업하지 않아도됩니다.