다음을 통해 공유


MQSCorrelationSetOrchestration(BizTalk Server 샘플)

MQSCorrelationSetOrchestration 샘플은 MQSeries 큐로 보낸 메시지와 실행 중인 오케스트레이션의 상관 관계를 다시 지정하기 위해 MQSeries 상관 관계 식별자를 사용하는 방법을 보여 줍니다. 오케스트레이션은 MQMD_CorrelId 및 MQMD_MsgID속성을 사용하여 MQSeries 상관 관계 식별자 및 메시지 식별자 값을 설정합니다. MQSeries 큐 관리자는 MessageID 값을 메시지의 CorrelationID 속성으로 복사합니다.

필수 구성 요소

이 샘플에서는 BizTalk Server 실행하는 동일한 서버에 IBM WebSphere MQSeries를 설치했다고 가정합니다.

이 샘플의 용도

이 샘플은 IBM WebSphere MQSeries Server로 보낸 메시지에 메시지 식별자 및 상관 관계 식별자를 설정하는 방법을 보여 줍니다. 이 방법은 메시지와 실행 중인 오케스트레이션 인스턴스의 상관 관계를 다시 지정하는 데 사용할 수 있습니다. MQSeries 큐 관리자는 메시지를 받으면 MessageID 값을 메시지의 CorrelationID 속성으로 복사합니다. 이 correlationID(MQMD_CorrelId)는 오케스트레이션에서 MQSeries의 응답 메시지를 MQSeries에 메시지를 보내는 데 사용되는 instance 연결하는 데 사용됩니다.

이 샘플이 디자인된 방식 및 이유

이 샘플은 오케스트레이션에서 처리 중인 문서를 추가 처리를 위해 MQSeries 큐로 보내고 실행 중인 오케스트레이션으로 반환할 수 있는 시나리오를 보여 줍니다.

이 샘플이 있는 위치

<Samples Path>\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration

다음 표는 이 샘플의 파일을 보여 주고 각각의 용도에 대해 설명합니다.

최근에 사용한 파일 설명
MQSCorrelationSetOrchestration.btproj,

MQSCorrelationSetOrchestration.sln
응용 프로그램에 대한 프로젝트 및 솔루션 파일입니다.
MQSCorrelationSetOrchestration.odx 응용 프로그램의 오케스트레이션입니다.
MQSCorrelationSetOrchestration.snk 강력한 이름 지정 키 파일입니다.
Setup.bat 이 샘플을 빌드하고 초기화합니다.

이 샘플의 사용 방법

전체 워크플로 중 한 단계로 메시지를 MQSeries 서버로 보내야 할 경우 이 샘플에 사용된 로직을 통합합니다.

WebSphere MQ Explorer를 통해 MQSeries 큐를 만들려면 다음을 수행하십시오.

  1. 시작을 클릭하고 프로그램을 가리킨 다음 IBM WebSphere MQ를 가리킨 다음 WebSphere MQ Explorer 클릭합니다.

  2. 큐 관리자를 두 번 클릭한 다음 기본 큐 관리자를 두 번 클릭합니다. 기본 큐 관리자의 이름은 일반적으로 QM_<machine_name> 여기서 machine_name 컴퓨터의 이름입니다.

  3. 큐를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 가리킨 다음 로컬 큐를 클릭합니다.

  4. 로컬 큐 만들기 대화 상자의 큐 이름에 "MQCorrelation"을 입력한 다음 확인을 클릭합니다.

수신 위치와 MQSeries 큐를 만들려면

  1. BizTalk Server 관리 콘솔을 엽니다.

  2. BizTalk Server 관리를 확장하고, BizTalk 그룹을 확장하고, 애플리케이션을 확장한 다음, 필요한 애플리케이션을 확장합니다.

  3. 수신 포트를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 가리킨 다음 단방향 수신 포트를 클릭합니다.

  4. 단방향 수신 포트 속성 대화 상자의 이름 상자에 "MQIn"을 입력하고 확인을 클릭합니다.

  5. 왼쪽 창에서 수신 위치 탭을 클릭한 다음 새로 만들기를 클릭합니다.

  6. 수신 위치 속성 대화 상자의 이름 상자에 "MQIn"을 입력합니다.

  7. 전송 유형 상자에서 MQSeries를 선택합니다.

  8. 수신 처리기 상자에서 BizTalkServerApplication을 선택합니다.

  9. 수신 파이프라인 상자에서 Microsoft.BizTalk.DefaultPipelines.PassThruReceive를 선택합니다.

  10. Configure를 클릭합니다.

  11. MQSeries 전송 속성 대화 상자의 폴링 간격 상자에 "10"을 입력합니다.

  12. 큐 정의 상자에서 줄임표(...) 단추를 클릭합니다.

  13. 큐 정의 대화 상자의 서버 이름 상자에 컴퓨터 이름을 입력합니다.

  14. 큐 관리자 상자에서 기본 큐 관리자를 선택합니다.

  15. 상자에 "MQCorrelation"을 입력한 다음 내보내기를 클릭합니다.

  16. 내보내기 대화 상자에서 큐 만들기를 클릭한 다음 모든 대화 상자를 종료할 때까지확인또는 완료를 클릭합니다.

MQSeries에 대한 송신 포트를 만들려면 다음을 수행하십시오.

  1. 포트 보내기를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 가리킨 다음 정적 단방향 송신 포트를 클릭합니다.

  2. 송신 포트 속성 대화 상자의 이름 상자에 "MQOut"을 입력합니다.

  3. 전송 유형 상자에서 MQSeries를 선택합니다.

  4. 송신 파이프라인 상자에서 Microsoft.BizTalk.DefaultPipelines.PassThruTransmit를 선택합니다.

  5. Configure를 클릭합니다.

  6. MQSeries 전송 속성 대화 상자의 큐 정의 상자에서 줄임표(...) 단추를 클릭합니다.

  7. 큐 정의 대화 상자의 서버 이름 상자에 컴퓨터 이름을 입력합니다.

  8. 큐 관리자 상자에서 기본 큐 관리자를 선택합니다.

  9. 상자에 "MQCorrelation"을 입력한 다음 확인을 클릭합니다.

  10. 모든 대화 상자를 종료할 때까지 확인을 클릭합니다.

수신 위치를 사용하도록 설정하고 송신 포트를 시작하려면

  1. BizTalk Server 관리 콘솔에서 수신 포트를 클릭합니다.

  2. 세부 정보 창에서 MQIn 수신 위치를 마우스 오른쪽 단추로 클릭하고 사용을 클릭합니다.

  3. 세부 정보 창에서 MQOut 송신 포트를 마우스 오른쪽 단추로 클릭하고 시작을 클릭합니다.

응용 프로그램에서 사용하는 폴더를 만들려면

  1. C:\ 드라이브에 "temp"라는 폴더가 아직 없는 경우 만듭니다.

  2. C:\temp 디렉터리 아래에서 "Pickup" 및 "Dropit"라는 폴더를 만듭니다.

샘플 빌드 및 배포

  1. 명령 창에서 다음 폴더로 이동합니다.

    <Samples Path>\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration

  2. 다음 작업을 수행하는 Setup.bat 파일을 실행합니다.

    1. 프로젝트에 대한 강력한 이름 키를 만듭니다.

    2. 오케스트레이션 프로젝트를 컴파일하여 배포합니다.

    3. 파일 어댑터로 송신 포트와 수신 포트를 만듭니다.

오케스트레이션 바인딩 및 시작

  1. BizTalk Server 관리 콘솔에서 Orchestrations 폴더를 확장합니다.

  2. 세부 정보 창에서 MQSCorrelationSetOrchestration 오케스트레이션을 마우스 오른쪽 단추로 클릭한 다음 바인딩을 클릭합니다.

  3. 다음 송신 포트 및 수신 위치에 오케스트레이션 포트를 바인딩합니다.

    오케스트레이션 포트 메시징 포트/수신 위치
    FileReceivePort MQSCorrelationSetOrchestration.FileReceivePort
    MQSeriesResponseReceivePort MQIn
    MQSeriesRequestSendPort MQOut
    FileSendPort MQSCorrelationSetOrchestration.FileSendPort
  4. 호스트를 클릭합니다.

  5. 호스트 상자에서 BizTalkServerApplication을 선택하고 확인을 클릭합니다.

  6. 송신 포트에서 MQSCorrelationSetOrchestration.FileSendPort를 마우스 오른쪽 단추로 클릭한 다음 시작을 선택합니다.

  7. 수신 위치에서MQSCorrelationSetOrchestration.FileReceivePort를 마우스 오른쪽 단추로 클릭한 다음 사용을 선택합니다.

  8. 오케스트레이션을 마우스 오른쪽 단추로 클릭하고 시작을 클릭합니다.

    참고

    오케스트레이션을 시작하면 오케스트레이션이 자동으로 등록됩니다.

애플리케이션을 테스트하려면

  1. C:\Temp\Pickup 폴더에 파일을 넣습니다.

  2. C:\Temp\Dropit 폴더에서 파일을 검사합니다.

    참고

    MQIn 수신 위치를 사용하지 않도록 설정하면 WebSphere MQ Explorer 메시지를 검사하고 메시지 및 상관 관계 식별자가 설정되어 있는지 확인할 수 있습니다. 이렇게 하려면 WebSphere MQ Explorer 시작하고 MQCorrelation 큐에 배치된 메시지를 검사합니다. 메시지 및 상관 관계 식별자는 메시지 속성 대화 상자의 식별자 탭에 표시됩니다.

    참고

    프로덕션 시나리오에서는 MQSeries 큐로 보낸 각 메시지에 고유한 ID를 할당해야 할 수 있습니다. 이 경우 오케스트레이션에서 Expression 셰이프를 수정하면 됩니다. 해당 속성을 고유한 24바이트 ID로 설정하려면 다음 줄을 변경합니다.

    MQSeriesRequestSendMessageModified(MQSeries.MQMD_MsgId) = "111213141516171819202122232425262728293031323334";

    MQSeriesRequestSendMessageModified(MQSeries.MQMD_CorrelId) = "111213141516171819202122232425262728293031323334";

    이러한 속성에 대해 고유한 24 바이트 ID를 설정하려면 MQSeries로 전송된 메시지에 대해 고유한 24 바이트 ID를 만들려면 섹션을 참조하세요.

MQSeries로 보낸 메시지에 대한 고유한 24바이트 ID를 만들려면 다음을 수행하십시오.

  1. Visual Studio에서 새 C# 클래스 라이브러리 프로젝트를 만듭니다.

  2. 다음 코드를 클래스의 .cs 파일에 붙여 넣습니다.

    using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.Security.Cryptography;  
    
    namespace MQId  
    {[Serializable]  
        public class GetId  
        {  
            RNGCryptoServiceProvider randomCryptoString = new RNGCryptoServiceProvider();  
    
            public string getGuidstr()  
            {  
                byte[] newGuid = GetRandomData(24);  
                return ConvertToHex(newGuid);  
            }  
    
            private byte[] GetRandomData(int keySize)  
            {  
                byte[] randomData = new byte[keySize];  
                randomCryptoString.GetBytes(randomData);  
                return randomData;  
            }  
    
            private string ConvertToHex(byte[] key)  
            {  
                StringBuilder hexString = new StringBuilder();  
                for (int i = 0; i < key.Length; ++i)  
                {  
                    hexString.Append(String.Format("{0:X2}", key[i]));  
                }  
                return hexString.ToString();  
            }  
        }  
    }  
    
  3. 프로젝트 속성 애플리케이션 페이지에서 MQId기본 네임스페이스와 GetId어셈블리 이름을 지정합니다.

  4. 프로젝트 속성 서명 페이지에서 어셈블리에 서명할 강력한 이름 키 파일을 지정한 다음 프로젝트를 빌드합니다.

  5. 전역 어셈블리 캐시 도구(gacutil.exe)를 사용하여 컴파일된 어셈블리를 GAC(컴파일된 dll 파일>의 gacutil /i < 이름)에 로드합니다.

  6. 이 샘플의 BizTalk 프로젝트에서 GetId 어셈블리에 대한 참조를 추가합니다.

  7. 이 샘플에 사용된 오케스트레이션에 두 개의 변수를 추가합니다.

    변수 이름(식별자) 형식
    GetId MQId.GetId
    strGuid System.String
  8. 이 샘플의 오케스트레이션에 사용된 Expression 셰이프에 다음 코드를 붙여 넣습니다. 이 코드는 기존 코드를 덮어씁니다.

    GetId = new MQId.GetId();  
    strGuid = GetId.getGuidstr();  
    MQSeriesRequestSendMessageModified = MQSeriesRequestSendMessage;  
    MQSeriesRequestSendMessageModified(MQSeries.MQMD_MsgId) = strGuid;  
    MQSeriesRequestSendMessageModified(MQSeries.MQMD_CorrelId) = strGuid;  
    
  9. 이미 배포된 경우 BizTalk Server 관리 콘솔에서 오케스트레이션을 중지하고 제거합니다. 그런 다음 , 이 샘플 빌드 및 배포 섹션의 단계에 따라 오케스트레이션 및애플리케이션을 테스트하려면 바인딩하고 시작합니다.

    참고

    MQSeries로 보낸 메시지에 대한 고유한 24바이트 ID를 만들기 위해 이 방법을 사용한다 해도 전송된 모든 메시지에 대해 고유한 ID를 100% 만들 수 있는 것은 아니지만 메시지 ID의 중복 가능성은 매우 낮아집니다. 메시지 ID의 중복을 완전히 피해야 할 경우 다른 사용자 지정 코드를 사용해야 합니다.

이 샘플에서 사용된 클래스 또는 메서드

이 샘플에서는 어떤 클래스 또는 메서드도 명시적으로 사용하지 않습니다.

참고 항목

요청-응답을 사용하여 메시지 상관 관계 지정
MQSeries 어댑터 샘플