2011-11-06 6 views
3

MSMQ 대기열을 사용하여 요청을로드 밸런싱 할 수 있습니까? 클라이언트 1-n이 WCF 서비스에 요청을 보내면 각 요청을 대기열에 넣고 백그라운드에서 1-n 서버를 사용할 수있을 때마다 사용 가능한 다음 요청을 가져옵니다. 그러나 어떻게 응답을 되 찾을 수 있습니까? 내 WCF 서비스에서 'complete'이벤트를 구독 할 수 있다는 것을 알았지 만, 한 가지만 신경 쓰면 모든 이벤트를 구문 분석해야합니다. 어떻게이 아키텍처로 콜백 메커니즘을 수행 할 수 있습니까?msmq 큐를 사용하여 서비스의로드 밸런싱?

+1

원시 MSMQ를 사용해야합니까? NServiceBus 또는 경쟁 ESB 중 하나를 들여다 보았습니까? – arootbeer

답변

4

MSMQ를 사용하여 이벤트를 보내는 경우에는 "응답을 다시받는"개념이 없습니다.

다음은 해결책입니다. 클라이언트는 각각 수신 대기중인 자체 메시지 대기열을 가질 수 있습니다. 작업자가 작업을 완료하면 클라이언트에게 "완료된"메시지를 보낼 수 있습니다.

그러나 서버는 클라이언트의 메시지 대기열 주소를 어떻게 알 수 있습니까?

한 가지 방법은 각 기능의 매개 변수로 클라이언트의 메시지 대기열 주소를 제공하는 것입니다.

더 나은 방법은이 주소를 사용자 지정 헤더 값으로 포함시키는 것입니다. 사용자 지정 헤더 솔루션은 두 가지 이유로 더 나은 방법입니다. 첫째, 클라이언트의 구성 파일을 통해 구성 할 수 있으므로 배포 후 큐 세부 정보가 변경 될 수 있습니다. 둘째, 의사 소통 "배관"의 세부 사항이 함수 호출 추상화 계층에 침입하는 것은 바람직하지 않습니다. 사용자 정의 헤더 솔루션을 사용하면이 문제를 피할 수 있습니다.

사용중인 사용자 지정 헤더의 예는 this question을 참조하십시오.

+0

http://stackoverflow.com/questions/9631349/what-is-outbound-transaction-in-layman-terms에 답변 해 주시겠습니까? – Lijo

1

작업자가 응답을 별도의 응답 대기열에 넣게 할 수 있습니다. 그런 다음 각 요청 - 응답 쌍에 대해 고유 한 ID를 사용하여 올바른 응답을 식별하십시오.

+1

MSMQ는 각 메시지에 대한 상관 ID를 생성하여 특정 메시지에 대한 응답을 식별하는 데 사용할 수 있습니다. http://msdn.microsoft.com/en-us/library/system.messaging.message.id.aspx – Matt

+0

http://stackoverflow.com/questions/9631349/what-is-outbound-transaction-in-layman-terms에 답변 해 주시겠습니까? – Lijo