2017-01-16 1 views
1

원격 큐에 배달 확인이 필요하며 MSDN Exists() 메서드에 따라 원격 큐 확인을 지원하지 않습니다.원격 큐에 MSMQ 동기 쓰기

나에 따르면 메시지 전달은

  • 원격 컴퓨터에 도달 할 수없는 다음과 같은 두 가지 시나리오에 실패 할 수 있습니다.
  • 시스템의 대기열이 없거나 삭제되었습니다.

트랜잭션 대기열을 사용하고 있습니다. AdministrationQueueUseDeadLetterQueue을 설정하면 메시지가 손실되지 않습니다.

하지만 원격 컴퓨터 큐에 메시지를 보내는 동기식을 원합니다. MSMQ가이를 지원합니까? 그리고 설계 상 지원되지 않는 경우에도 어떻게 가능합니까?

답변

0

MSMQ가 이것을 지원합니까? 또한 설계 상 이 아닌데도 가능합니까?

MSMQ 서비스에는 양방향 메시징을 지원하는 기본 제공 방법이 없습니다.

이렇게하려면 대기열에있는 채널의 양쪽 끝에 코드를 작성해야합니다. 그러나 이것은 일반적으로 최고로 복잡합니다.

다음 링크는 System.Messaging과를 사용하여이를 달성하는 방법에 대해 설명합니다 : 그것은 성능상의 이유로 악명입니다 ReceiveByCorrelationId() 동작으로 correlationId가 헤더를 사용을 기반으로

https://www.codeproject.com/Articles/999238/Efficient-Message-Correlation-in-MSMQ

.

https://msdn.microsoft.com/en-us/library/ms751435(v=vs.110).aspx

또 다른 방법은 WCF를 사용하고 도우미 라이브러리 Duplex MSMQ라고 :이 일을하는 또 다른 방법은 WCF를 사용하는 것입니다

그러나, 이것은 여전히 ​​System.Messaging과를 사용하여 수동 응답에 의존

https://www.codeproject.com/Articles/41907/WCF-Duplex-MSMQ

그러나, 이러한 방법 중 어느 것도 아주 좋은없고 모두가 원치 않는 복잡성을 소개합니다.

내가 원격 큐

에 확인 배달이 필요 나는 우리가 당신이 "확인"무슨 뜻인지 이해하기 위해 필요한 것 같아요. 트랜잭션 대기열을 사용하는 경우 한 응용 프로그램에서 다른 응용 프로그램으로 메시지를 전송할 때 보장 된 전달 의미를 제공합니다.

반면에 실시간 응답이 필요한 경우 메시지 대기열을 사용하는 것이 사용자의 목적에 맞지 않을 수 있습니다.

MSMQ를 강제로 사용하는 경우 상용 제품을 사용하는 것보다 더 나쁠 수 있습니다.나는 NServiceBus을 광범위하게 사용했으며, MSMQ를 사용하지만 요청 - 응답과 같은 강력한 메시지 교환 패턴을 추가합니다. 유료 제품이지만 단일 스레드 작업 만 필요하면 무료 버전을 사용할 수 있습니다. 내가 필요로 무엇

내가 올바르게 이해한다면, 당신의 요구 사항은 MSMQ 지원을 수행하는 응답이다

.. 성공을위한 실시간 응답 실패 메시지였다. 참조 : 좋은 반응이다

https://msdn.microsoft.com/en-us/library/ms978430.aspx#bdadotnetasync2_topic4

https://msdn.microsoft.com/en-us/library/ms707129(v=vs.85).aspx

+0

합니다. 네, 맞습니다. "Comfirmed Delivery"에 대해 tranactional 대기열을 사용하고 있습니다. 내가 필요한 것은 성공과 실패 메시지에 대한 실시간 응답 이었기 때문에 더 많은 메시지를 대기열로 보내지 못하게 할 수있었습니다. 언급 한 첫 번째 codeproject 기사가 내 시나리오에 적합하지 않습니다. 메시지의 소비자는 대상 큐에서 읽는 Windows 서비스입니다. 해당 큐의 CorrelationID를 가진 메시지를 기다리면 메시지가 먼저 선택되는 경쟁 조건을 입력 할 수 있으며 메시지를 기다리게됩니다. – Xlr8

+0

@ Xlr8 - 왜 대기중인 전송이 필요합니까? 또한 요청에 대한 답변을 하시겠습니까? 아니면 승인 만 받아야합니까? –

+0

요청 - 답장이 필요합니다. 메시지가 수신되거나 거부 될 때까지 기다려야합니다. MSMQ는 연결이 끊어진 시스템을위한 것이지만 내 경우에는 시스템이 온라인이라고 가정합니다. – Xlr8