메시지 큐


메시지 (message queue)는 사용자가 키보드나 마우스로 명령한 것을 메시지 형태로 변환하여 저장하는 큐이다. 메시지 큐는 윈도 운영 체제의 모든 스레드에 존재한다. 사용자가 창에 어떤 명령을 보내면 프로그램(또는 창)이 그 에서 메시지를 읽고 처리한다. 예를 들어, 마우스를 움직이면 마우스를 움직였다(WM_MOUSEMOVE)는 메시지가 메시지 큐에 저장되고 프로그램은 이에 맞는 처리를 한다. 즉, 메시지 큐는 프로그램(또는 창)에게 사용자가 취한 행동을 변환, 실행하게 만든다.

[편집]메시지 처리

메시지 처리는 “Win32 프로그램”의 윈도 프로시저에서 한다. 메시지를 처리하면 메시지 핸들러가 호출된다.

[편집]바깥 고리






메시지 큐 ( 영어 : Message queue )는 프로세스 간 통신 과 동일한 프로세스 내에서 스레드 간 통신에 사용되는 소프트웨어 구성 요소 이다. 제어 및 데이터를 전달하는 메시지 의  이다.

목차

  [ 숨기기 ] 

개요 편집 ]

메시지 큐는 비동기 통신 프로토콜 의 일종을 제공하고, 송신 측과 수신 측이 메시지 큐에 동시에 교환하지 않아도된다는 것을 의미한다. 대기중인 메시지는 수신 측이 그것을 만회까지 포함 된 상태가된다.메시지 큐는 대부분의 경우 저장할 수있는 하나의 메시지의 크기와 유지 수있는 메시지 수에 제한을두고있다.

메시지 큐는 다양한 구현이있다. 운영 체제 에서 구현되는 경우 나 응용 프로그램 소프트웨어 에서 구현 될 수있다. 그 큐는 시스템 이 필요로하는 용도로만 사용되는 [1] [2] [3] .

다른 구현에서는 컴퓨터 사이의 메시지의 교환에 사용되거나 여러 응용 프로그램이나 여러 운영 체제 사이의 연결에 사용되기도한다 [4] . 이러한 메시지 큐 시스템에서는 시스템 오류가 발생해도 메시지를 없애거나없는 "회복력; resilience"있는 기능이 제공되는 경우가 많다. 이런 종류의 메시지 큐를 구현 한 상용 소프트웨어 ( 메시지 지향 미들웨어 라고도 함)로, IBM 의 WebSphere MQ , 오라클 의 Oracle Database 에 포함 된 Oracle Advanced Queuing 영어 ) ​​(AQ), 마이크로 소프트 의 MSMQ 영어 ) ​​, 히타치 제작소의 TP1/MessageQueue, 세존 정보 시스템즈 HULFT-Message 등이있다. Java 관련 표준으로 Java Message Service 가 있고 여기에는 오픈 소스 것도 독점 의 것을 포함하여 몇 가지 구현이있다.

메시지 관련 미들웨어 시스템으로 여러 오픈 소스 것이있다. 예를 들면, JBoss Messaging , JORAM , Apache ActiveMQ , Apache Qpid 영어 버전 ) [5] , RabbitMQ , Skytools PgQ , Mule ,OpenMQ 등이다.

VxWorks 나 QNX 같은 실시간 운영 체제 (RTOS)는 메시지 큐를 주요 프로세스 간 통신 기구 및 스레드 간 통신 메커니즘으로 채용하고있다. 이러한 경우, 실시간 성이 중시되기 때문에 메시지 큐와 CPU 스케줄링이 조밀하게 관련하고있다. 1980 년대 초에는 VRTX와 pSOS + 등 RTOS에서 메시지 큐를 사용하는 스레드 간 통신 메커니즘이 사용되기 시작했다.

이용 편집 ]

일반적인 메시지 큐의 구현은 시스템 관리자 가 메시지 큐 소프트웨어 (큐 관리자)를 설치 및 구성하고 이름이 붙은 메시지 큐를 정의한다. 응용 프로그램은 큐에 메시지를 저장하는 것을 기다릴 소프트웨어 루틴 (수신기)를 등록한다. 다른 (여러) 응용 프로그램이 큐에 연결하여 메시지를 거기에 전송한다. 큐 관리자는 수신 응용 프로그램이 연결될 때까지 메시지를 축적 해두고 연결 한 시점에 등록 된 소프트웨어 루틴을 호출한다. 수신 응용 프로그램은 적절한 방법으로 메시지를 처리한다.

여기에는 다양한 변형이 존재한다. 예를 들어, 다음과 같은 점이다.

  • 지속성 (큐를 메모리에 상주하거나 디스크에 두는가? 더욱 안전성을 높이기 위해 DBMS 에 둘 수있다)
  • 보안 정책 - 메시지에 응용 프로그램 액세스 인증
  • 메시지 삭제 정책 - 큐와 메시지에 생존 시간 ( time to live )가 설정 될 수있다.
  • 시스템은 데이터의 필터링을 지원하며, 수신자는 사전에 설정 한 기준에 맞는 메시지 만 받는다.
  • 배포 정책 - 하나의 메시지가 한 번 이상 배포되는 것을 보장하거나 아니면 여러 번 제공하지 않을 것을 보증 하는가?
  • 라우팅 정책 - 큐 (서버)가 복수 존재하는 경우, 그 사이의 메시지 전달을 어떻게 하는가?
  • 배치 정책 - 메시지는 즉시 전달 되는가? 아니면 잠시 기다리고 쌓인 메시지를 한 번에 배포 하는가?
  • 메시지가 "엔큐; enqueue"되었다는 것은 어떤 경우를 가르키 는가. 어딘가의 대기 된 경우 모두 가르키는지. 아니면 하나의 원격 대기 된 경우를 가르키 는가. 또는 모든 큐에 놓인 경우를 가르키 는가.
  • 송신자는 (일부 혹은 전부의) 수신자가 메시지를 받았는지 알 필요가 있는지.

이러한 시스템으로의 의미, 신뢰성, 효율성 등을 구체적으로 어떻게할지 등 설계 고려 사항이다.

표준과 프로토콜 편집 ]

역사적으로, 메시지 큐는 독점 폐쇄적 프로토콜로 사용되기 시작한 것으로, 따라서 다른 OS와 프로그래밍 언어를 포함한 환경의 구축이 제한되어 있었다.

메시지 큐를 더 편재으로하는 초기의 시도로, 썬 마이크로 시스템즈 의 JMS 사양이, Java 는 클라이언트 API 를 추상화하여 이기종 연결을 가능하게했다. 따라서 Java를 사용하면 메시지 큐의 공급자를 전환 가능하게하고, SQL 에서 데이터베이스의 전환이 가능하게 된 것과 비슷하다. 그러나 실제로는 메시지 큐 기법과 시나리오는 매우 다양하며, JMS가 항상 사용하는 것은 아니다.

그런 다음 메시지 큐를 오픈 편재적인 것으로하기 위해 다음 세 가지의 표준이 태어나고있다.

이러한 표준화 및 채용 단계는 각각 다르다. 모두 HTTP 와 같은 수준에서 운용된다.

독점 구현도 HTTP 를 사용하여 메시지 큐를 제공하고있는 경우가있어, 예를 들어 Amazon 의 SQS 가있다. 이것은 요청 - 응답 형식의 동기화 프로토콜에 (메시지 큐에 필요한) 비동기 동작 계층을 구축 할 수있는 때문이다. 그러나, 그러한 구현은 하위 프로토콜에 제한되어 위에서 언급 한 바와 같은 메시지 큐의 모든 옵션을 제공하지 못할 수있다.

동기 및 비동기 편집 ]

많은 통신 프로토콜 은 동기 형이다. World Wide Web 과 Web 서비스 에서 사용되는 HTTP 등은 분명히 동기이다. 동기화 모델은 한 시스템이 다른 시스템과의 연결을 형성하고 요청을 보내고 응답을 기다린다. 많은 경우, 이제 전혀 문제 없다. 예를 들어, 사용자가 Web 페이지에 요청을 보내고 응답을 기다린다는 경우이다.

그러나 이러한 시나리오에서는 잘되지 않는 경우가있다. 예를 들어 AJAX (Asynchronous 자바 스크립트 and XML )는 비동기 적으로 텍스트 나 XML 을 보내고, 웹 페이지의 일부를 더 적절한 정보로 업데이트한다. Google 은 자동 완성 기능이 방식을 채용하고 있으며, 검색 창에 검색어의 일부를 입력했을 때 가능한 전체 키워드 목록을 제공한다. 이 목록은 사용자의 입력에 따라 비동기 적으로 업데이트된다.

다른 비동기 예로 이벤트 알림 시스템과 출판 - 구독 형 시스템이있다.

  • 응용 프로그램이 다른 응용 프로그램에 이벤트 발생을 알리고 싶지만, 그 응답을 기다릴 필요 없다 (혹은 기다릴 수없는 경우)
  • 출판 - 구독 모델 의 시스템은 응용 프로그램 정보를 어떤 (알 수없는 개수의) 수신자에게 "출판"한다.
  • In publish / subscribe Systems, an application "publishes"information for any number of clients to read.

이러한 경우, 예를 들면 정보의 수령인이 충돌 해 버리고있는 가능성도 보낸 사람이 응답을 기다리는 것은 적절하지 않다.

응용 프로그램은 동기화 또는 비동기 하나만 구현할 필요는 없다. 대화 형 응용 프로그램은 특정 요구에 즉시 응답해야하는 것이다 (고객에게 재고를 확인한 후 구매 요청이 접수 된 것을 알리는 경우 등). 그러나 다른 한편으로 큐를 사용하여 처리를 지연시킬 수있는 부분도있다 (청구 금액의 계산을 완료하고 데이터를 중앙 데이터베이스에 등록, 관련된 다른 서비스를 실행하는). 이러한 경우에, 비동기 메시지 큐를 사용하면 시스템 전체의 성능 (특히 고객 보았다 응답 성능)을 향상시킬 수있다.

각주 편집 ]

  1. ^ Win32 system message queues. About Messages and Message Queues " . Windows User Interface . Microsoft Developer Network. 2010 년 4 월 21 일 검색.
  2. ^ Linux and POSIX message queues. Overview of POSIX Message queues at linux.die.net
  3. ^ Using Linux Message Queues. [1] at www.civilized.com
  4. ^ 예 MSMQ가있다. Message Queuing (MSMQ) " . Network Communication . Microsoft Developer Network. 2009 년 5 월 9 일 보기.
  5. Apache Qpid Project, an Implementation of AMQP .

관련 항목 편집 ]

외부 링크 편집 ]


출처 - http://ko.wikipedia.org/wiki/%EB%A9%94%EC%8B%9C%EC%A7%80_%ED%81%90







Posted by linuxism
,