Window2000에서는 'MSMQ'라는 표현 대신, '메시지 대기열'이라는 표현을 사용한다.


OS 설치시 메시지 대기열 서비스를 설치하겠다고 체크하면 자동으로 해당 컴포넌트 및 서비스가 설치되므로 설치에는 큰 어려움이 없다.

단, 설치시 설치 모드로 서버 모드와 종속 클라이언트 모드가 있는데 일반적으로 서버 모드를 사용하여 네트워크가 끊어지더라도 로컬에 임시저장할 수 있게 한다.

서버 모드를 선택하면 Active Directory관련 옵션이 있는데 필요없는 내용이므로 '수동'을 선택하고, 다음 화면에서 '사용하지 않음'을 선택하면 된다.


메시지 대기열 서비스가 설치되면 [컴퓨터 관리]의 [서비스 및 응용 프로그램]에 [메시지 대기열]이라는 이름의 서비스가 추가된 것을 확인할 수 있다. 여기에서 큐를 추가/삭제/관리할 수 있다.


또, 해당 컴포넌트를 사용하여 프로그래밍에 이용할 수 있는데, VB에서 [프로젝트]-[참조]에 나타나는 이름은 다음과 같다.


Microsoft Message Queue 2.0 Object Library (C:\WINNT\System32\MQOA.DLL)



아래에 간단한 예제를 적어보았다.


송신측.


Dim objQueueInfo As MSMQ.MSMQQueueInfo

Dim objQueue As MSMQ.MSMQQueue

Dim objMessage As MSMQ.MSMQMessage


Set objQueueInfo = New MSMQ.MSMQQueueInfo

objQueueInfo.FormatName = "DIRECT=OS:thermidor\Private$\TEST_QUEUE"


Set objQueue = objQueueInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)

Set objMessage = New MSMQ.MSMQMessage


objMessage.Label = "테스트 송신"

objMessage.Body = "이 데이터는 송신 테스트 데이터입니다."

objMessage.Send objQueue

objQueue.Close


Set objMessage = Nothing

Set objQueue = Nothing

Set objQueueInfo = Nothing



수신측.


Dim objQueueInfo As MSMQ.MSMQQueueInfo

Dim objQueue As MSMQ.MSMQQueue

Dim objMessage As MSMQ.MSMQMessage


Set objQueueInfo = New MSMQ.MSMQQueueInfo

objQueueInfo.FormatName = "DIRECT=OS:thermidor\Private$\TEST_QUEUE"


Set objQueue = objQueueInfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)

Set objMessage = objQueue.Receive(, , , 100)


If Not objMessage Is Nothing Then

MsgBox objMessage.Label & " - " & objMessage.Body

Else

MsgBox "현재 큐에 데이터가 없습니다."

End If

objQueue.Close


Set objMessage = Nothing

Set objQueue = Nothing

Set objQueueInfo = Nothing




여기에서, MSMQQueueInfo는 서버간 메시지 대기열 송수신 환경을 설정하고 초기화하는데 이용되는 인터페이스로서 일반적으로 같은 도메인 내에 있는 서버간의 통신에는 PathName을 사용하고 그렇지 않은 경우에는 위 예제처럼 FormatName을 사용하여 서버를 지정한다.


PathName 지정방법을 몇 가지 예로 들어보겠다.


objQueueInfo.PathName = ".\TEST_QUEUE"

objQueueInfo.PathName = "thermidor\PRIVATE$\TEST_QUEUE"



FormatName 지정방법은 위 예제와 같은 직접 지정방법 외에도 다음과 같이 해당 서버의 큐에 부여된 Public GUID를 이용하여 지정하는 방법도 있다.


objQueueInfo.FormatName = "public=54AF88FD-7A0F-4C61-8ACA-7024E295C8ED"



MSMQQueue는 실제 큐를 제어하는 인터페이스로서 송신할 것인지, 수신할 것인지를 결정하고 수신할 경우에는 메시지를 읽고 삭제할 것인지(Receive), 그냥 읽기만 하고 삭제하지 않을 것인지(Peek)를 결정할 수 있다.


Set objMessage = objQueue.Receive(, , , 100)

Set objMessage = objQueue.Peek(, , 100)


필요없는 인수들을 생략하는 대신 다음과 같이 지정할 수도 있다.


Set objMessage = objQueue.Receive(ReceiveTimeout:=100)

Set objMessage = objQueue.Peek(ReceiveTimeout:=100)



마지막으로, MSMQMessage는 큐로 보내거나 받을 메시지에 대한 제어를 담당하는 인터페이스로서, 메시지는 Label(제목)과 Body(실제 메시지)로 나뉘어져 있다.




이상으로 간단히 MSMQ에 대해 알아보았다.


'Tech: > ASP·VB6' 카테고리의 다른 글

WScript 예제  (0) 2008.06.26
VB-SystemMonitor 사용하기  (0) 2008.06.26
VB-메시지박스 자동 종료하기  (0) 2008.06.26
VB 속도향상 팁 45가지  (0) 2008.06.26
VB-IBM MQSeries 사용법  (0) 2008.06.26


Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]