큐 관리 지원
이제 BizTalk Server MQSeries 어댑터를 사용하여 MQSeries 큐 관리자에서 원격으로 큐를 만들고 삭제할 수 있습니다. BizTalk Server MQSeries 큐 관리자와 직접 통신하는 원격 MQSAgent COM+ 개체를 사용하기 때문에 지원됩니다. 대개 이 MQSAgent는 런타임에 원격 MQSeries 서버 큐에서 메시지를 읽고 MQSeries 서버 큐에 메시지를 쓰는 데 사용됩니다. 여러 BizTalk 서버를 이 원격 서비스의 클라이언트로 사용할 수 있습니다. 또한 이 MQSAgent에서 제공되는 큐 만들기 및 삭제 함수를 오케스트레이션이나 어댑터 내에서 직접 호출할 수 있습니다. 따라서 오케스트레이션이나 어댑터가 임시 큐를 만든 다음 해당 큐에서 메시지를 보내고 다른 큐에서 회신을 받은 후에 임시 큐를 최종적으로 삭제하는 매우 동적인 시나리오가 가능해집니다.
CreateQueue 및 DeleteQueue API
CreateQueue 및 DeleteQueue API는 다음과 같이 정의됩니다.
구조 정의
typedef enum QueueUsage {
Normal = 0,
Transmission = 1
} QueueUsage;
typedef enum ResultCode {
QueueAlreadyExists = 0, // no bits set
QueueCreated = 1, // QueueCreated
QueueCreatedAndRemoteDefinitionUpdated = 5, // QueueCreated | RemoteDefinitionUpdated
QueueAndRemoteDefinitionCreated = 7, // QueueCreated | RemoteDefinitionCreated | RemoteDefinitionUpdated
QueueDoesNotExist = 8, // QueueDoesNotExist
QueueDeleted = 16 // QueueDeleted
} ResultCode;
인터페이스 정의
[
object,
uuid(E90AC1A6-657B-4680-AF6A-89F11113FB8B),
dual,
nonextensible,
helpstring("IMQSAdmin Interface"),
pointer_default(unique)
]
interface IMQSAdmin2 : IDispatch{
HRESULT CreateQueue (
[in]BSTR queueManager,
[in]BSTR newQueueName,
[in]QueueUsage usage,
[in]BSTR remoteDefinition,
[in]BSTR remoteQName,
[in]BSTR remoteQMgrName,
[in]BOOL updateExistingRemoteDefinition,
[out, retval]ResultCode* resultCode);
HRESULT DeleteQueue (
[in]BSTR queueManager,
[in]BSTR newQueueName,
[out, retval]ResultCode* resultCode);
};
[
uuid(412AF00D-7CA8-4d2a-AFF6-F61CE2E29A0D),
helpstring("MQSAdmin Class")
]
coclass MQSAdmin
{
[default] interface IMQSAdmin2;
};
예제
예제 1의 단계를 완료하여 MQSeries 서버 큐를 만들거나 삭제하는 데 사용할 수 있는 Visual Studio C# 콘솔 애플리케이션을 만듭니다.
예 1
MQSeries 서버 큐를 관리하는 C# 콘솔 응용 프로그램 만들기
이름이 MQSeriesQueues인 Visual Studio에서 새 Visual C# 콘솔 애플리케이션을 만듭니다.
생성된 Program.cs 파일의 기존 코드를 아래 코드로 바꿉니다.
using System; using System.Collections.Generic; using System.Text; using MQSAgentLib; namespace MQSeriesQueues { class ManageQueues { public static void Main(string[] args) { // The first argument should be "c" (without quotes) // to create a queue, anything else to delete a queue. // The 2nd and 3rd arguments should be the name of // the MQSeries Queue Manager and the name of // the queue to be created or deleted for example // the following usage will create the local // queue testq for the Queue Manager QM_Test // MQSeriesQueues c QM_Test testq createordeleteQs(args[0], args[1], args[2]); } static void createordeleteQs(string Qswitch, string QMgr, string QName) { if ((Qswitch =="c" & (QMgr != null & QName != null))) { CreateQueue(QMgr, QName); } else if(QMgr != null & QName != null) { DeleteQueue(QMgr, QName); } } static void CreateQueue(string Qmgr, string Qname) { MQSAdmin admin = new MQSAdmin(); ResultCode resultCode = admin.CreateQueue(Qmgr, Qname, 0, "", "", "", 0); if ((resultCode & ResultCode.QueueCreated) == ResultCode.QueueCreated) { Console.WriteLine("Queue Created."); } else if ((resultCode & ResultCode.QueueAlreadyExists) == ResultCode.QueueAlreadyExists) { Console.WriteLine("Queue Already Exists."); } } static void DeleteQueue(string Qmgr, string Qname) { MQSAdmin admin = new MQSAdmin(); ResultCode resultCode = admin.DeleteQueue(Qmgr, Qname); if ((resultCode & ResultCode.QueueDeleted) == ResultCode.QueueDeleted) { Console.WriteLine("Queue successfully deleted."); } if ((resultCode & ResultCode.QueueDoesNotExist) == ResultCode.QueueDoesNotExist) { Console.WriteLine("Queue did not exist anyway!"); } } } }
MQSAgent 1.0 형식 라이브러리에 이 프로젝트에 대한 참조를 추가합니다. MQSAgent 1.0 형식 라이브러리는 참조 추가 대화 상자의 COM 탭에서 사용할 수 있습니다.
참고
MQSAgent COM+ 구성 요소는 이 콘솔 응용 프로그램을 실행하는 컴퓨터에 설치해야 합니다. MQSAgent COM+ 구성 요소를 설치하는 방법에 대한 자세한 내용은 MQSAgent COM+ 구성 마법사 사용을 참조하세요.
콘솔 애플리케이션을 빌드합니다.
컴파일된 콘솔 응용 프로그램과 같은 디렉터리에서 명령 프롬프트를 엽니다.
컴파일된 콘솔 응용 프로그램의 이름을 적절한 인수와 함께 입력하고 Enter 키를 누릅니다. 예를 들어 Queue Manager QM_Test 대한 큐 테스트q를 삭제하려면 명령 프롬프트에 다음 텍스트를 입력하고 Enter 키를 누릅니다.
MQSeriesQueues d QM_Test testq
Queue Manager QM_Test 대한 큐 테스트q를 만들려면 명령 프롬프트에 다음 텍스트를 입력하고 Enter 키를 누릅니다.
MQSeriesQueues c QM_Test testq