2017-11-09 16 views
0

MSMQ에서 트랜잭션 큐를 만들었습니다. 그런 다음 해당 대기열에 두 개의 메시지를 성공적으로 제출합니다. 첫 번째 메시지는 프로세서에서 오류를 일으키고 MSMQ 트랜잭션은 롤백됩니다. 따라서 메시지는 대기열에 다시 저장됩니다. 두 번째 메시지는 처리되고 MSMQ 트랜잭션이 커밋 될 때 성공합니다.MSMQ 트랜잭션

참고 : 첫 번째 메시지를 다른/포이즌 큐로 옮길 수있는 코드가 아직 없습니다. 즉, 처리를 위해 계속 처리 될 것이므로 이론적으로 메시지 2는 결코 처리 될 수 없습니다.

문제점 : 해당 트랜잭션 대기열에서 메시지를 처리하는 리스너/프로세서가 1 개있는 경우 메시지 2가 선택되지 않습니다. 이것은 예상된다.

그러나 두 명의 수신기가 있으면 메시지 # 2가 선택됩니다. 그것은 나를 혼란스럽게합니다. 나는 MSMQ 트랜잭션 큐가 메시지를 도착한 순서대로 처리 할 수 ​​있다고 생각했다.

사이드 노트 : 메시지 1을 더 이상 처리 할 수 ​​없다고 결정하고 다른 대기열로 이동하는 방법을 결정하려면 어떻게합니까? MSMQ는 프로세서에서 메시지를 가져온 횟수를 계속 계산합니까?

답변

0

메시지가 읽히기 전까지 대기열에 있습니다. 첫 번째 청취자가 포이즌 메시지를 읽으면 트랜잭션이 중단되고 메시지가 다시 표시 될 때까지 숨겨진 것으로 표시됩니다. 그 동안 두 번째 청취자는 포이즌 메시지를 볼 수없고 두 번째 메시지 만 보입니다.

"메시지 1을 더 이상 처리 할 수없고 다른 대기열로 옮길 수 없다는 것을 어떻게 결정할 수 있습니까?" - WCF/MSMQ에는 포이즌 메시지 처리 기능이 내장되어 있습니다. 재시도 대기열을 사용하여 직접 시뮬레이션 할 수 있습니다. 첫 번째 오류가 발생하면 항상 대기열 # 1을 다시 시도하십시오. 메시지를 다시 시도하십시오. 실패하면 항상 대기열 # 2를 다시 시도하십시오. 메시지를 다시 시도하십시오. 실패하면 조사를 위해 최종 대기열로 이동하십시오.

"MSMQ는 메시지가 프로세서에서 수집 된 횟수를 계속 계산합니까?" - 번호 :