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 |