2013-02-25 3 views
2

이것은 내가 사용하고있는 샘플 코드이지만, 메시지가 보내지는 put 또는 access 큐에서 응답을받는 방법을 모르겠습니다. 참/거짓, 난 확인할 수, 메시지 큐를 보냈습니다, 그게 무슨 내 질문은 - 그것은 반환 값에 따라, 예를 들어 BOOL했을 경우IBM MQ에서 put 메소드를 사용하여 승인을 얻는 방법은 무엇입니까?

mqQueue = mqQMgr.AccessQueue("Queue Name", MQC.MQOO_OUTPUT | 
MQC.MQOO_INPUT_SHARED |  MQC.MQOO_INQUIRE); 
mqQueue.Put(mqMsg, mqPutMsgOpts); 

PUT 방법은 리턴 타입이 void입니다 , 어떻게 메시지를 대기열로 보내도록인지를 다시 얻는가?

모든 입력은 매우 유용 할 것입니다. 질문을 명확히 설명에 따라

답변

3

업데이트 :

가 동봉하여 PUT을 시도 블록과 MQException을 잡을 수있어. MQException이 던져지지 않은 경우 PUT이 작동하고 RC = 0이 반환됩니다. 예를 들어,이 샘플 PUT 프로그램입니다 :

void PutMessages() 
    { 
     try 
     { 
      // mq properties 
      properties = new Hashtable(); 
      properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED); 
      properties.Add(MQC.HOST_NAME_PROPERTY, hostName); 
      properties.Add(MQC.PORT_PROPERTY, port); 
      properties.Add(MQC.CHANNEL_PROPERTY, channelName); 

      // display all details 
      Console.WriteLine("MQ Parameters"); 
      Console.WriteLine("1) queueName = " + queueName); 
      Console.WriteLine("2) host = " + hostName); 
      Console.WriteLine("3) port = " + port); 
      Console.WriteLine("4) channel = " + channelName); 
      Console.WriteLine("5) numberOfMsgs = " + numberOfMsgs); 
      Console.WriteLine(""); 

      // create connection 
      Console.Write("Connecting to queue manager.. "); 
      queueManager = new MQQueueManager(queueManagerName, properties); 
      Console.WriteLine("done"); 

      // accessing queue 
      Console.Write("Accessing queue " + queueName + ".. "); 
      queue = queueManager.AccessQueue(queueName, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING); 
      Console.WriteLine("done"); 

      // creating a message object 
      message = new MQMessage(); 
      message.WriteString(messageString); 

      // putting messages continuously 
      for (int i = 1; i <= numberOfMsgs; i++) 
      { 
       Console.Write("Message " + i + " <" + messageString + ">.. "); 
       queue.Put(message); 
       Console.WriteLine("put"); 
      } 

      // closing queue 
      Console.Write("Closing queue.. "); 
      queue.Close(); 
      Console.WriteLine("done"); 

      // disconnecting queue manager 
      Console.Write("Disconnecting queue manager.. "); 
      queueManager.Disconnect(); 
      Console.WriteLine("done"); 
     } 

     catch (MQException mqe) 
     { 
      Console.WriteLine(""); 
      Console.WriteLine("MQException caught: {0} - {1}", mqe.ReasonCode, mqe.Message); 
      Console.WriteLine(mqe.StackTrace); 
     } 
    } 

언급 한 바와 같이,이 샘플 코드와 아마 더 세분화 된 예외 처리를했을 생산위한 실제 프로그램에서입니다. 즉, API 호출은 성공하거나 MQException을 던집니다. 정확한 동작은 옵션에 따라 다릅니다. 예를 들어 GET에서 메시지 변환을 요청하면 변환 오류가 발생할 수 있지만 바이너리 페이로드로 검색된 메시지와 정확히 일치하는 메시지는 성공합니다.


이전 응답 :

내가 질문을 이해,하지만 난/요청을 설계 WebSphere MQ를 사용하여 프로그램을 응답하는 방법을 당신이 요구하는 무엇을 생각 모르겠어요 그리고 내가 '방법 응답 할 것입니다. 그러나 "응답"으로 인해 PUT에서 실제로 이유와 반환 코드를 의미하는 경우 질문을 명확히하고 답변을 업데이트하겠습니다.

요청/응답의 일반적인 패턴은 요청 프로그램이 먼저 회신 대기열을 여는 것입니다. 열린 큐의 이름이 모델 큐인 경우, 큐 관리자는 동적 큐를 작성하고 그에 대한 핸들을 리턴합니다. 그렇지 않으면 대기열이 이미 존재하는 로컬 대기열이어야합니다.

응용 프로그램이 reply-to 큐에 핸들을 가지고 있으면 요청 큐를 열고 새 요청 메시지를 만듭니다. 로컬 회신 - 대기열의 이름은 요청 메시지의 replyToQueue 필드를 초기화하는 데 사용됩니다. 로컬 큐 관리자 이름은 메시지의 replyToQMgr 필드에 대해 자동으로 입력됩니다. 그런 다음 응용 프로그램은 메시지를 넣고 reply-to 대기열의 응답을 기다립니다.

동일한 답장 대기열에서 수신 대기하는 여러 개의 앱 인스턴스가있는 경우 일반적으로 원하는 특정 메시지에 대한 상관 ID를 지정합니다. 일반적으로 요청 메시지를 읽는 서버는 MQMD.MsgID을 회신 메시지의 MQMD.CorrelID 필드에 넣지 만 수신 메시지 ID를 아웃 바운드 메시지 ID로 전송하는 경우가 있습니다.

GET을 실행하기 전에 COMMITPUT에 있는지 확인하거나, 다른 사람은 결코는 응답을 얻을 것이다.

Infocenter 항목 Design of the Request sample program에 더 많은 내용이 있으며 기본 Windows WMQ 클라이언트 설치에서는 C:\Program Files (x86)\IBM\WebSphere MQ\tools\dotnet에서 샘플 프로그램을 찾을 수 있습니다. 샘플을 익히고 거기에서 나온 코드 중 일부를 다시 사용하는 것이 좋습니다. 실제로 전체 클라이언트를 다운로드하여 설치하지 않은 경우 SupportPac MQC75에서 무료 사본을받습니다. 그런 다음 설치할 때 SDK 및 샘플 코드를 설치하는 옵션을 선택해야합니다.

+0

감사합니다. PUT 메서드는 반환 값을 기반으로 예를 들어 bool 일 경우 void 반환 유형입니다. true/false로 설정하면 메시지가 대기열로 전송되었습니다. 이것이 내 질문입니다. 어떻게 반환합니까? 메시지를 대기열로 보냅니다. – Sharpeye500

1

어떻게 메시지가 대기열로 전송됩니다, 그래서 내가 다시 승인을받을 수 있나요

하면 MQ는 메시지를 넣을 것을 당신의 확인은 다음 예외가 발생하지 않습니다 넣어 방법 열.

관련 문제