다음을 통해 공유


RPC-Message 큐 애플리케이션 개발

RPC 애플리케이션에서 MSMQ 전송을 활용하는 데 필요한 작업은 거의 필요하지 않습니다. 동기 메시징의 경우 메시지 큐 전송(ncadg_mq)만 프로토콜 시퀀스로 지정하면 됩니다. ncadg_mq 프로토콜은 브로드캐스트 호출을 제외한 모든 표준 데이터그램 기능을 지원합니다. 또한 현재 메시지 큐 전송은 동적 엔드포인트를 지원하지 않습니다.

IDL 파일의 원격 프로시저 선언에 [message] 특성을 적용하면 해당 호출에 대한 비동기 모드 메시지 큐를 자동으로 구현합니다. 이렇게 하면 클라이언트 및 서버 애플리케이션이 다음을 포함하여 메시지 및 메시지 큐와 연결된 많은 속성을 제어할 수 있습니다.

  • 서비스 품질
  • 영수증 승인
  • 저널링
  • 통화 우선 순위
  • 서버 프로세스 큐의 지속성

서비스 품질은 전송이 서버 프로세스에 대한 호출을 전달하기 위해 수행하는 작업입니다. 빠른 배달은 메모리에서 큐에 대기되므로 상당히 빠르지만 컴퓨터 또는 네트워크 연결이 잘못된 시간에 중단되면 호출이 손실됩니다. 복구 가능한 배달은 배달될 때까지 디스크 파일에 게시되므로 컴퓨터 작동이 중단된 경우에도 통화가 손실되지 않습니다. 이렇게 하면 배달이 보장되지만 각 호출이 디스크에 기록되므로 성능이 저하됩니다.

또한 반환하기 전에 호출이 대상(서버) 큐에 도달했음을 승인을 기다리도록 MSMQ 전송에 지시할 수 있습니다. 이 옵션을 선택하면 서버가 호출을 승인할 때까지 클라이언트가 차단됩니다. 그렇지 않으면 제어는 호출을 할 때 즉시 클라이언트로 돌아갑니다.

저널링을 사용하여 호출을 디스크에 기록할 수 있습니다. 저널링이 켜져 있으면 서버 프로세스로 가는 길에 다음 홉으로 전송될 때 각 호출이 디스크에 기록됩니다.

우선 순위가 높은 호출이 나중에 도착하는 경우에도 우선 순위가 높은 호출보다 우선 순위가 높은 호출이 우선 순위를 지정할 수 있도록 호출 우선 순위를 RPC [메시지] 함수 특성과 함께 사용할 수 있습니다. 호출 우선 순위는 동기 RPC에서 제한된 방식으로 작동하지만 동기 RPC 호출은 비동기 호출과 동일한 방식으로 쌓을 수 없습니다.

클라이언트 프로세스는 RpcBindingSetOption을 호출하여 위의 모든 속성을 제어합니다. 설정되면 이러한 속성은 RpcBindingSetOption에 대한 다른 호출에서 변경될 때까지 계속 적용됩니다.

RPC 서버 프로세스는 수신 큐의 수명을 제어할 수 있습니다. 기본적으로 서버 프로세스가 종료되면 큐가 삭제됩니다. 그러나 서버 프로세스는 엔드포인트를 설정할 때 RpcServerUseProtseqEpEx 를 사용하여 전송에 큐가 계속 존재할 수 있도록 하고 서버 프로세스가 실행되지 않는 경우에도 호출 요청을 수락하도록 지시할 수 있습니다. 이 경우 서버 프로세스가 다시 온라인 상태가 되면 호출이 큐에 대기되고 나중에 실행됩니다.

참고

인터페이스에서 비동기 [메시지] 호출을 사용하는 경우 RpcServerUseProtseqEpEx(ncadg_mq)를 호출하기 전에 RpcServerRegisterIf 또는 RpcServerRegisterIfEx를 호출하여 인터페이스 등록해야 합니다. 프로토콜 시퀀스를 켜면 서버에 대한 큐에서 이미 대기 중인 모든 호출이 큐에서 읽기 시작됩니다. 해당 RPC 인터페이스가 등록되지 않은 경우 호출이 실패합니다. 이 상황은 원격 프로시저 호출에 대한 영구 엔드포인트를 설정했고, 서버가 종료되었으며, 클라이언트가 계속해서 서버로 통화를 보내는 경우에 발생할 수 있습니다. 이러한 호출은 서버가 다시 온라인 상태가 되면 읽기를 기다리며 큐에 쌓입니다.

 

자세한 내용은 RpcBindingSetOption, RpcServerUseProtseqEpEx 및 [message], ncadg_mq 참조하세요.