2014-07-11 5 views
1

MSMQ 끝점과 함께 WCF를 사용하고 있으며 this question에 설명 된 동작을보고 있습니다. 기본적으로 서비스는 한 번에 하나의 메시지를 처리하도록 조정되지만 대기열에서 2 개의 메시지가 취해지며 하나는 겉으로보기에는 메모리에 보관되고 다른 하나는 메시지로 처리됩니다. 처리 중입니다.MSMQ - 현재 처리중인 메시지를 쿼리 할 수 ​​있습니까?

이것은 무슨 일이 일어나고 있는지 모니터링하는 데 문제가 있습니다. 큐에있는 작업과 처리중인 작업을 보여주는 모니터링 페이지가 있지만이 동작으로 인해 큐에서 제거되었지만 아직 처리되지 않은 작업이 효과적으로 사라지는 기간이 있습니다. 을 사용하여 현재 대기열에있는 메일 목록을 가져옵니다.

저는 MSMQ에 익숙하지 않지만 메시지가 대기열에서 제외 된 경우 다른 프로세스가이 메시지를 표시하지 않도록 보이지 않는 것으로 표시되어 있다고 가정합니다. 이 메시지를 쿼리 할 수있는 방법이 있습니까?

답변

1

낮은 메시지 볼륨과 다음 메시지를 받기 위해 돌아 오기 전에 장시간 실행되는 프로세스를 시작하는 메시지 처리기를 사용하는 것이 얼마나 괴롭 겠는지를 알 수 있습니다.

그러나 의미 상으로 메시지가 대기열에서 사라지면 실제로 이 처리되고으로 처리됩니다. 처리가 때로는 메시지를 무한정 시간 동안 캐싱하는 경우가 있습니다.

트랜잭션 대기열을 사용하는 동안 어떤 이유로 든 서비스가 사라지면 숨겨진 메시지가 삭제되지 않습니다.

귀하의 질문에 직접 답변하지 않으니 양해 바랍니다.

+0

감사합니다. 내구성을 테스트했으며 숨겨진 메시지가 서비스 실패시 대기열에 반환되었음을 확인했습니다. 일어나는 일에 대한 정확한 그림을 얻을 수있는 방법이 없다는 것은 귀찮은 일입니다. –

+0

예, 귀찮습니다. MSMQ에 오신 것을 환영합니다. –

1

당신이 정말가이 커서을 시도하고 싶은 경우. 그래도 모니터링 페이지에 대한 과잉 같은 소리. 당신이 성능에 미치는 영향의 확실하지 않은 전체 메시지 등을 얻을 수 있도록

MessageQueue.Peek on MSDN

당신은 그것을 설정할 수 있습니다. 전에 비슷한 일을했습니다 ...

+0

peek을 사용하면 처리중인 메시지를 볼 수 있습니까? 나는 이미 그것을 시도했지만 아마 내가 잘못한 것 같아요. 아니면 엿보기를 호출하고 대기열에 들어오는 메시지를 기다리는 것이 좋습니다. –

+0

예, 정확하게 그 것입니다. 커서가 활성 상태로 유지되고 들어오는 메시지를 들여다 봅니다. 그것이 적합한지를보기 위해 msdn 예제와 유사한 POC로 놀아 라. 타임 아웃은 재미있을 수 있지만 크게 만들 수 있습니다. 타임 아웃을 throw합니다. –

+0

흠, 그것이 IIS 호스팅 서비스이므로 까다로워할지 모르지만 작동 할 것 같습니다. 나는 그것이 나의 모니터링 페이지를위한 아마 과잉이라고 생각한다. 나는 내가 다른 길을 찾지 않는다면 그것을 명심 할 것이다. –