2017-11-03 14 views
0

wcf의 트랜잭션 지원은 물론 MSMQ의 트랜잭션 메시징 개념을 이해하려고합니다.대기열 (MSMQ)의 트랜잭션 지원

트랜잭션 지원이있는 대기열의 경우 다음과 같은 작업 집합이 자동으로 수행됩니까?

  1. 시스템 1의 클라이언트 A는 응용 프로그램 데이터베이스에 대기열로 보낸 메시지를 기록합니다.
  2. 주문 만들기/보내기 대기열에 메시지를 만듭니다 (예 : MSMQ).
  3. 컴퓨터 2에서 클라이언트 B가 MSMQ 메시지를 가져옵니다.
  4. 클라이언트 B가 자체 응용 프로그램 데이터베이스에 주문 행을 만듭니다?

분산 트랜잭션에서 위의 모든 단계를 수행하면 4 단계가 모두 실패하거나 원자 적으로 성공한다는 의미입니까?

거래가 1 - 2 단계에만 적용됩니까?

마찬가지로 WCF가 MSMQ 대신에 위와 관련 되었다면 모든 단계가 아톰 (즉, 트랜잭션)으로 처리됩니까?

+0

분산 트랜잭션 내의 모든 단계는 커밋되거나 롤백됩니다. –

답변

1

짧은 대답 : 1 + 2는 트랜잭션이고, 3 + 4는 두 번째 트랜잭션입니다. (3)가 2와 동일한 트랜잭션에있을 수있는 유일한 방법은 수신자가 송신자와 동일한 트랜잭션 컨텍스트 (즉, 동일한 논리 실행 스레드)에있을 수있는 유일한 방법 일 수있다 .2. 그렇지 않으면 첫 번째 트랜잭션이 커밋되지 않았으므로 메시지를 아직받을 수 없습니다. 트랜잭션 콘텍스트를 송신자로부터 수신기로 전파하기 위해, 메시지 큐를 중복되게 할 송신자로부터 수신자로의 제 2 통신 채널 (즉, 원격 호출)이 필요하게 될 것이다. 그러나 수신은 대기열에서 다른 메시지를받을 수도 있기 때문에 실제로는 이해가되지 않습니다 ...

실제로 트랜잭션 MQ는 발신자와 수신자를 정확히 두 가지 다른 트랜잭션에서 분리합니다 송신자는 수신자의 가용성 및 성능에 영향을받지 않고 격리를 희생한다는 사실을 명심하십시오. 따라서 MQ는 동일한 트랜잭션 컨텍스트 내에서 두 개의 서로 다른 응용 프로그램 (1 및 4)을 갖지 않고 저장 및 전달 원 자성 + 내구성을 제공합니다. 원자 적으로 1 + 2, 결국 원자 적으로 3 + 4가됩니다.

WCF를 사용하면 MQ 대신 WS-AtomicTransactions를 사용하여 동일한 트랜잭션에서 1과 4를 가질 수 있습니다. MQ 솔루션과 비교할 때, 이는 4의 효과없이 1의 효과를 관찰하지 않으므로 격리를 제공합니다.