2016-11-01 1 views
2

예상대로 MQ 메시지를 보내고 messageID와 correlationID를 반환하고 MQ 서버에서 반환 한 messageID를 사용하여 보내는 특정 메시지의 응답을 캡처 할 수 있습니다.C# IBM MQ 클라이언트가 내 메시지를 보내고 있습니다.

내 응용 프로그램을로드 테스트 도구에 넣었는데 어떤 경우에는 큐 관리자에서 반환 한 messageID가 이전 메시지와 같았고이 경우 응용 프로그램이 다음 메시지를 읽지 못하는 것을 보았습니다 messageID.

저는 큐 관리자의 소유자가 아니며 관리자의 응답이 "사용자 고유의 메시지 ID를 작성했습니다."

그럴 수 있습니까? messageID에 특정 형식이 있어야합니까?

이 내 코드입니다 : 나는 다음과 같은 메시지를 보내기 전에 그래서 난 내 자신의 메시지 ID 값으로의 MessageID 속성을 설정할 수 있습니다

  message = strInputMsg; 
      queueMessage = new MQMessage(); 
      queueMessage.WriteString(message); 
      queueMessage.Format = MQC.MQFMT_STRING; 
      queueMessage.Expiry = timeOutExpiry; 
      queueMessage.ReplyToQueueName = QueueNameExpiry; 
      queuePutMessageOptions = new MQPutMessageOptions(); 
      queuePutMessageOptions.Options =  MQC.MQRO_COPY_MSG_ID_TO_CORREL_ID; 
      queue.Put(queueMessage, queuePutMessageOptions); 
      bytReturn = queueMessage.MessageId; 

?

queueMessage.MessageId = myOwnMessageId 
+0

나 자신의 메시지 ID를 생성하는 것을 권장합니다. 가장 좋은 방법은 요청 메시지 ID를 응답 상관 ID에 복사하는 것입니다. – Stavr00

답변

1

예, 그것은 코드가 명시 적으로 메시지 ID를 설정하는 것이 가능하지만 코드는 일반적으로 일어나는 방법이다 MQMD 구조를 재사용 할 것으로 보인다. 로드 테스트 도구가 동일한 메시지를 여러 번 재생하고 메시지 ID를 보존하는 동안 사용자 설명 및 코드에 따라 가능성이 큽니다.

MQ가 메시지 ID를 설정하도록 허용 된 경우 MQ는 메시지 ID를 생성하는 ID에 대해 큐 관리자 내에서 고유하도록 보장합니다. 많은 큐 관리자에서 GUID를 보장하지는 않지만 메시지 ID에 QMgr 이름의 12자를 포함시켜 충돌을 방지하려고 시도합니다. 따라서 어떤 부하 테스트 도구가 사용되고 있는지에 대한 정보는 없지만 메시지 재생을 사용하는 경우 그 가능성은 MQ가. NET MQMessage() 클래스 생성자를 실행하는 동안 메시지 ID를 복제하는 버그를 가지고있는 것보다 훨씬 가능성이 높습니다.

은 참조하십시오
말한다 MQMessage.NET class "물론 ... 기본 메시지 디스크립터 정보가 포함 된 MQMessage 객체를 만듭니다"기본 MQMD는 메시지 ID를 생성하기 위해 QMGR됩니다.

MQMD - MsgId (MQBYTE24) 아래쪽의 메모에는 MsgID가 고유하고 본문에서 메시지를 넣는 응용 프로그램으로 제어 할 수있는 방법이 설명되어 있습니다.

관련 문제