2012-02-27 3 views
0

NServiceBus가 이러한 방식으로 작동한다는 것을 이해하면 DTC를 사용하는 메시지 트랜잭션과 함께 모든 데이터베이스 트랜잭션을 래핑하고 실패 할 경우 모든 것을 롤백합니다.NServicebus : DTC없이 메시지 롤백 기능을 사용할 수 있습니까?

이제 NServiceBus가 데이터베이스 트랜잭션을 처리 할 필요가 없습니다. DTC를 사용하지 않으려 고하기 때문에 (Nservicebushost 및 SQL 서버는 별도의 ec2 인스턴스에 있습니다. , 그리고 나는 ec2 인스턴스에서 RPC 포트를 열 수 없다고 생각한다.) 그러나 핸들링이 실패 할 경우를 대비해 메시지를 풀고 싶지는 않다. 예외가 발생하면 재 시도하고 최대 재시도 메시지를 이동해야한다. 오류 큐로.

Nservicebus가 이와 같이 작동하도록 구성 할 수 있습니까?

답변

5

여기의 문제는 ec2 인스턴스의 충돌과 관련이 있습니다. DTC는 충돌시에도 메시지가 손실되지 않도록 보장합니다.

다른 옵션은 핸들러에 주변 거래를 억제하는 것입니다 : 우리는이 NServiceBus 자체에서 수행해야 할 수있는 방법을 소개하겠습니다

using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))

3.0. 유창한 초기화 코드에서 .SuppressDTC() (또는 이와 비슷한 것) 호출 일 것입니다.

+0

본인은 알고 있지만 대안을 선호합니다. 메시지 전송을 처리하는 중 메시지를 엿보고 처리가 성공한 경우 대기열에서 메시지를 수신하므로 트랜잭션을 사용하는 것보다 신뢰할 수 있지만 단점이 있지만 다중 스레드 시나리오에서는 작동하지 않지만 단일 스레드에서 실행 중이라는 것을 알고 있으면 (비 상용 nservicebus를 사용하고 있기 때문에) 알고 있습니다. 그런 메커니즘을 사용하여 DTC를 피할 수있었습니다. – Giedrius

관련 문제