2014-09-22 3 views
0

SQL Azure 데이터베이스 (현재는 여전히 로컬 SQL 2012 인스턴스를 사용하는)에 대해 작업하는 특정 끝점에 여러 메시지 처리기가 있습니다. 두 이벤트를 게시하는 명령 처리기가 X 및 Y 호출합니다. 같은 끝점에서 X 구독자 및 Y 구독자가 있습니다. 이러한 구독자는 모두 내부적으로 Z라는 동일한 데이터 액세스 구성 요소를 사용합니다. 종속성 주입은 공유가 아닌 호출 단위로 구성됩니다.Azure 서비스 버스 전송을 사용하는 NServicebus에서의 트랜잭션

구성 요소 Z는 커튼 아래에서 Entity Framework 6을 사용하고 있습니다. 내가 겪고있는 문제는 데이터베이스를 여는 것이 SqlException을 던지고 MSDTC 에스컬레이션에 대해 불평하고 있다는 것입니다.

일시적으로 TransactionScope.Suppress에서 처리기를 래핑했는데 그 오류가 중지되었지만보다 근본적인 것이 누락되었다고 생각합니다.

끝점을 비 트랜잭션으로 구성하는 간단한 문제입니까? Azure Service Bus를 전송 메커니즘으로 사용하도록 구성했기 때문에이 기능이 제대로 작동 할 것이라고 생각했을 것입니다. 메시지 처리기 내에서 예외가 발생하면 NServiceBus가 여전히 재 시도합니다. (SLR 한도까지 - 질문의 일부가 아니며, 나는 멱도 문제를 이해한다.)

+0

NServiceBus 전송 용으로 또는 단순히 데이터 저장소로 SQL Server를 사용하고 있습니까? Azure 서비스 버스 전송의 경우 - NSB는 평소와 같이 FLR (SLR이 구성된 경우)으로 예외를 재 시도합니다. –

+0

구성 문제 인 것처럼 보이지만 설정을 이해하는 데 어려움을 겪고 있습니다. (NServiceBus 전송은 어떤 것을 사용합니까?) –

+0

SQL Server는 데이터 저장소로만 사용되고 있습니다. Azure Service Bus를 전송 수단으로 사용하고 있습니다. 또한 트랜잭션이 아닌 트랜잭션을 만들면 FLR 또는 SLR 재시도를 얻지 못할 것이라고 읽었습니다. 그 맞습니까. –

답변

0

@Phil,

첫째, 당신은 SQL 애저와 MSDTC를 사용하지 않아야 - 그것은 지원 아니에요. 이 기능은 제안되었지만 under review 만 있습니다. DTC는 Azure에서 지원되지 않습니다. 또는 following suggestion을 살펴보면 SqlTransaction 방식을 사용할 수 있습니다.

두 번째로, 사용중인 전송은 데이터 액세스와 아무 관련이 없습니다. Azure Service Bus를 사용하기 때문에 Azure Service Bus는 처리기 코드의 일부가 아닙니다. 핸들러를 트랜잭션 화하는 것은 원자 변경 또는 롤백을 강제하는 것입니다. 처리기에 관계없이 다시 시도합니다. 핸들러/엔드 포인트가 트랜잭션이 아니며 핸들러에서 DB에 대한 첫 번째 쓰기가 성공하고 두 번째 실패한 경우 첫 번째 쓰기가 되돌릴 수없는 문제가 있습니다. Azure 서비스 버스는 운송 수단으로서, 본질적으로 거래가 아닙니다 (즉, DTC가 없음).

+0

어떤 방법 으로든 MSDTC를 사용하지 않으려 고했지만, 나는 그것이 전혀 호출되지 않아서 놀랐다. 이후 재시도가 Service Bus에서 어떻게 작동하는지 이해 했으므로 경로가 명확 해졌습니다. –

0

어떤 버전의 NServiceBus.Azure를 사용하고 있습니까? 예외의 스택 추적이 있습니까? 그거 어디서 났어?

우리는 보내기 트랜잭션 범위를 명시 적으로 벗어나 DTC로 승격하는 것을 막기 위해 명시 적으로 푸시합니다. 따라서 트랜잭션은 SQL에 로컬이므로 여기에서 일어나는 일은 의심 스럽습니다.

당신의 설명에 따르면 각 처리기 (호출 컨테이너 구성마다)마다 다른 데이터 액세스 인스턴스를 사용하고 있고 동일한 메시지에 여러 개의 처리기가있는 것 같습니다. 이 두 가지 모두 SQL에 대한 새 연결을 여는 경우 승격도 볼 수 있습니다 (동일한 서버 인 경우에도 마찬가지 임)

그럴 수 있습니까? 그것은 두 번째 오픈에 던졌습니다?

+0

그럴 수도 있습니다.수락 된 답변을 확인하고 업데이트합니다. –