MSMQ(Microsoft Message Queue)를 통해 애플리케이션 개발자는 메시지를 주고받으며 빠르고 신뢰할 수 있게 애플리케이션과 소통할 수 있습니다. 메시지 처리는 보장된 메시징과 다양한 비즈니스 프로세스 수행을 위한 신뢰할 수 있는 안전장치(failsafe) 방법을 제공합니다.
MSMQ는 XML 웹 서비스, .Net 리모팅과 마찬가지로 분산 개발 기술입니다. 하지만 XML 웹 서비스나 .NET 리모팅 컴포넌트를 사용할 때는 클라이언트가 서버와 실시간으로 정보를 교환해야 하며, 서버는 온라인 상태를 유지해야 합니다. MSMQ는 서버가 오프라인일 때 작동하며, 클라이언트 측 메시지 큐에 메시지를 일시적으로 저장한 후 온라인으로 전송하여 처리하도록 합니다.
분명히 MSMQ는 클라이언트가 서버로부터 신속하게 응답해야 하는 상황에는 적합하지 않으며, MSMQ는 서버와 비동기적으로 상호작용하므로 서버가 처리할 때까지 오래 기다릴 필요가 없습니다.
XML 웹 서비스와 .Net Remoting 모두 비동기 호출을 처리하는 [OneWay] 속성을 제공하지만, 이는 서버 측에서 긴 메서드 호출이 클라이언트 측을 오랜 시간 차단하는 문제를 해결하는 데 사용됩니다. 하지만 큰 클라이언트 부하 문제를 해결할 수 없으며, 서버는 처리 속도보다 요청을 더 빠르게 받습니다.
일반적으로 [OneWay] 속성은 전문 메시징 서비스에서는 사용되지 않습니다.
1. 기본 용어와 개념
"메시지"는 두 컴퓨터 간에 전송되는 데이터 단위입니다. 메시지는 텍스트 문자열만 포함하는 매우 단순할 수 있습니다; 또한 더 복잡할 수 있으며 내장된 객체를 포함할 수도 있습니다.
메시지는 대기열로 전송됩니다. "메시지 큐"는 메시지 전송 중에 메시지를 저장하는 컨테이너입니다. 메시지 큐 관리자는 메시지를 출발지에서 목적지로 중계할 때 중개 역할을 합니다. 큐의 주요 목적은 라우팅을 제공하고 메시지 전달을 보장하는 것입니다; 메시지가 전송될 때 수신자가 부재 중이면, 메시지 큐는 메시지가 성공적으로 전달될 때까지 메시지를 보관합니다.
"메시지 큐잉"은 마이크로소프트의 메시지 처리 기술로, 마이크로소프트 윈도우가 설치된 컴퓨터 조합의 모든 애플리케이션에 대해 메시지 처리 및 메시지 큐잉 기능을 제공합니다. 이는 동일한 네트워크에 있거나 동시에 온라인 상태에 있든 상관없습니다.
"메시지 큐 네트워크"는 서로 메시지를 주고받을 수 있는 컴퓨터 그룹을 의미합니다. 네트워크 내 다양한 컴퓨터는 메시지가 원활하게 처리되도록 하는 데 서로 다른 역할을 합니다. 일부는 메시지 전송 방법을 결정하는 라우팅 정보를 제공하고, 일부는 전체 네트워크에 관한 중요한 정보를 담으며, 일부는 단순히 메시지를 주고받는 기능을 제공합니다.
메시지 큐 설치 과정에서 관리자는 어떤 서버가 서로 통신할 수 있는지 결정하고 특정 서버에 대해 특별한 역할을 설정합니다. 이 '메시지 큐' 네트워크를 구성하는 컴퓨터들은 '사이트'라고 불리며, 이들은 '사이트 링크'로 서로 연결되어 있습니다. 각 사이트링크에는 관리자가 결정하는 '오버헤드'가 있으며, 이는 이 사이트링크를 통해 메시지가 얼마나 자주 전달되는지를 나타냅니다.
메시지 큐 관리자는 네트워크 내에서 라우팅 서버 역할을 하는 하나 이상의 컴퓨터를 설정합니다. 라우팅 서버는 각 사이트링크의 오버헤드를 분석하여 여러 사이트를 통해 메시지를 가장 빠르고 효율적으로 전달하는 방법을 결정하고, 메시지를 어떻게 전달할지 결정합니다.
2. 큐 유형
대기열에는 두 가지 주요 유형이 있습니다: 네트워크 내 본인 또는 다른 사용자가 생성하는 대기열과 시스템 대기열입니다.
사용자 생성 큐는 다음 중 어느 것이든 될 수 있습니다:
공개 큐는 메시지 큐 네트워크 전체에 복제되며, 네트워크에 연결된 모든 사이트가 접근할 수 있습니다.
개인 큐는 네트워크 전반에 공개되지 않습니다. 대신, 이들은 해당 지역의 로컬 컴퓨터에서만 이용할 수 있습니다. 개인 큐는 큐의 전체 경로 이름이나 라벨을 아는 애플리케이션만 접근할 수 있습니다.
관리 큐는 특정 메시지 큐 네트워크에서 전송된 메시지 수신을 확인하는 메시지를 포함합니다. MessageQueue 컴포넌트가 사용할 관리 큐가 있다면 지정하세요.
응답 큐는 대상 애플리케이션이 메시지를 받을 때 전송 애플리케이션에 반환되는 응답 메시지를 포함합니다. MessageQueue 컴포넌트가 사용할 응답 큐를 지정하세요.
시스템이 생성하는 큐는 일반적으로 다음 범주로 나뉩니다:
저널 큐는 선택적으로 전송된 메시지의 복사본과 큐에서 제거된 메시지의 복사본을 저장합니다. 각 메시지 큐 클라이언트의 단일 저널 큐는 해당 컴퓨터에서 전송된 메시지의 사본을 저장합니다. 서버의 각 큐마다 별도의 다이어리 큐가 생성됩니다. 이 저널은 그 큐에서 제거된 메시지를 추적합니다.
데드 레터 큐는 전달이 불가능하거나 만료된 메시지의 사본을 저장합니다. 만료되거나 전달이 불가능한 메시지가 트랜잭션 메시지라면, "트랜잭션 데드레터 큐"라 불리는 특별한 데드레터 큐에 저장됩니다. 죽은 편지는 만료된 메시지가 저장된 컴퓨터에 저장됩니다. 타임아웃 및 만료 메시지에 대한 자세한 내용은 기본 메시지 속성(Default message properties)을 참조하세요.
보고 큐에는 메시지가 목적지에 도달하는 경로를 나타내는 메시지와 테스트 메시지도 포함될 수 있습니다. 각 컴퓨터에는 보고 대기열이 하나만 있을 수 있습니다.
전용 시스템 큐는 시스템이 메시지 처리 작업을 수행하기 위해 필요한 관리 및 알림 메시지를 저장하는 일련의 전용 큐입니다.
애플리케이션에서 이루어지는 대부분의 작업은 공개 대기열과 그 메시지에 접근하는 것입니다. 하지만 애플리케이션의 저널링, 확인 응답 및 기타 특수 처리 요구에 따라 일상 운영에서 여러 가지 다른 시스템 큐가 사용될 가능성이 큽니다.
3. 동기식 대 비동기식 통신
큐 통신은 본질적으로 비동기적인데, 메시지 전송과 큐에서 받는 메시지가 서로 다른 프로세스에서 이루어지기 때문입니다. 또한, 수신 작업은 비동기식으로 수행할 수 있는데, 메시지를 받고자 하는 사람이 주어진 큐에 BeginReceive 메서드를 호출해 즉시 다른 작업을 계속할 수 있기 때문입니다. 이것은 사람들이 아는 '동기식 통신'과는 매우 다릅니다.
동기 통신에서는 요청 발신자가 다른 작업을 수행하기 전에 의도된 수신자의 응답을 기다려야 합니다. 발신자가 기다리는 시간은 수신자가 요청을 처리하고 응답을 보내는 데 걸리는 시간에 전적으로 달려 있습니다.
4. 메시지 큐와의 상호작용
메시지 처리 및 메시징은 서버 기반 애플리케이션 구성 요소 간 프로세스 간 통신을 위한 강력하고 유연한 메커니즘을 제공합니다. 이들은 구성 요소 간 직접 호출에 비해 다음과 같은 여러 장점을 제공합니다:
안정성 – 컴포넌트 실패는 컴포넌트 간 직접 호출보다 메시지에 미치는 영향이 훨씬 적으며, 메시지는 큐에 저장되어 제대로 처리될 때까지 그 상태로 남아 있습니다. 메시지 처리는 트랜잭션 처리와 유사하며, 메시지 처리가 보장됩니다. 메시지 우선순위 지정 – 더 긴급하거나 중요한 메시지를 상대적으로 중요하지 않은 메시지보다 먼저 받을 수 있어, 중요한 애플리케이션에 대한 적절한 응답 시간을 보장할 수 있습니다. 오프라인 기능 – 메시지가 전송되면 임시 대기열로 보내져 성공적으로 전달될 때까지 그 상태로 유지됩니다. 원하는 큐에 대한 접근이 어떤 이유로든 불가능할 경우, 사용자는 작업을 진행할 수 있습니다. 동시에, 네트워크 연결이 복구되면 메시지 전달이 보장되기 때문에 다른 작업들은 메시지가 처리된 것처럼 계속 진행될 수 있습니다. 트랜잭션 메시지 처리 – 여러 관련 메시지를 하나의 트랜잭션에 결합하여 메시지가 순차적으로, 단 한 번만 전달되고 목적지 큐에서 성공적으로 검색할 수 있도록 합니다. 오류가 있으면 전체 거래가 취소됩니다. 보안 – MessageQueue 구성 요소가 기반이 되는 메시지 큐잉 기술은 Windows 보안을 사용하여 접근 제어를 보호하고, 감사를 제공하며, 구성 요소가 주고받는 메시지를 암호화 및 인증합니다.
5. .NET 환경에서 간단한 메시지 큐 프로그램 작성
(1) 메시지 큐잉 서비스를 먼저 설치하세요
제어판의 "프로그램 추가/제거" – "Windows 구성 요소 추가/제거" 단계를 통해 MSMQ를 설치하세요.
MSMQ는 작업 그룹 모드 또는 도메인 모드 중 하나로 설치할 수 있습니다. 설치 프로그램이 디렉터리 서비스를 제공하는 메시지 큐를 실행하는 서버를 찾지 못하면, 워크그룹 모드로만 설치할 수 있으며, 이 컴퓨터의 메시지 큐는 프라이비시 큐 생성과 메시지 큐를 실행하는 다른 컴퓨터와의 직접 연결만 지원합니다.
(2) MSMQ 구성
오픈 컴퓨터 관리 – 메시지 큐잉 및 개인 큐 아래에 MSMQDemo 큐 생성
(3) 코드를 작성하기 - 단순히 MSMQ 객체를 시연하기
MessageQueue 클래스는 "메시지 큐"를 감싸는 래퍼입니다. MessageQueue 클래스는 Message Queue에 대한 참조를 제공합니다. MessageQueue 생성자에서 기존 리소스로 가는 경로를 지정할 수도 있고, 서버에 새 큐를 생성할 수도 있습니다. Send, Peek, Receive 명령을 호출하기 전에, MessageQueue 클래스의 새로운 인스턴스를 기존 큐와 연관시켜야 합니다.
MessageQueue는 동기식 메시지와 비동기식 두 가지 유형의 메시지 검색을 지원합니다. 동기화된 피크 및 수신 메서드는 프로세스 스레드가 지정된 간격으로 새 메시지가 큐에 도착할 때까지 기다리게 만듭니다. 비동기식 BeginPeek과 BeginReceive 메서드는 메시지가 큐에 도달하기 전에 메인 애플리케이션 작업이 별도의 스레드에서 계속 실행되도록 허용합니다. 이 방법들은 콜백 객체와 상태 객체를 사용하여 스레드 간 정보 통신을 용이하게 합니다.
소스 코드 다운로드:
관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다 회답
|