2014-03-03 5 views
1

또 다른 newb MQ Server 질문. 메시지를 탐색하고 데이터베이스에 메시지 텍스트를 저장 한 다음 큐에서 메시지가 제거되도록 메시지를 읽어야하는 ASP.NET C# 응용 프로그램을 작성했습니다. 그렇게하면 저장에 실패하면 메시지가 대기열에 남아 있으므로 다시 보내 달라는 요청을하지 않아도됩니다.MQ WebSphere MessageID Woes

문제는 메시지를 탐색 할 때 메시지를 고유하게 식별하여 성공적인 데이터베이스 저장 후 읽을 수있는 (제거하는) 방법이 필요하다는 것입니다. 상관 ID 및 MessageId에 대해 읽었으며 값을 가져 오는 데 어려움이 있습니다.

CorrelationId는 항상 공백이므로 사용할 수 없습니다. messageId 읽을 수있는 것으로 변환하는 방법을 알 수 없습니다.

예 : MQ Explorer에 messageID가 AMQ AZMEUNK62 bS Ý으로 표시됩니다. MQ Explorer는 메시지 ID Y이트가 다음과 같다고 말합니다. 414D512055534E4A5241523632202020126210532001DD02.

어떻게 메시지 ID 바이트를 사람이 읽을 수있는 문자열로 변환하고 되돌릴 수 있습니까?

내가 사용할 수없는 결과를 반환하는 아래의 코드 시도했습니다 (AMQ AZMEUNK62 ↕b►S ☺를? ☻) 나는 때문에 이러한 지주

Passing ids in IBM MQ client

의 이러한 방법을 시도

string msgIdStr = System.Text.Encoding.Default.GetString(mqMessage.MessageId); 
string strMsgId = Encoding.UTF8.GetString(mqMessage.MessageId, 0, mqMessage.MessageId.Length); 

How to convert byte[] to string?

모든 의견을 환영합니다.

답변

1

MQ Message와 Correl (및 Group) ID는 인간이 읽을 수있는 것이 아니기 때문에 바이너리, 즉 바이트 배열로 유지할 것을 강력히 권장합니다. 또는 실제로 원하는 경우 문자열이나 16 진수로 변환하십시오 표시 가능한 버전). 이 문자열에는 qmgr 이름의 시작 부분 인 AMQ와 예를 들어 날짜/시간 및 카운터와 관련된 일부 이진 정보가 들어 있습니다. (C 응용 프로그램에서 흔히 볼 수있는 문제는 strcpy'ing하는 사람이 첫 번째 null에서 자르고 어떤 것도 일치하지 않음)

실제 문제는 무엇입니까? 찾아보기, 커서 아래 메시지 가져 오기 또는 메시지 아이디로 얻을 수있는 msgid를 알고있는 경우. 데이터베이스 업데이트 이후에 커밋 할 때까지는 제거 할 수없는 싱크 포인트에 빠지거나 데이터베이스 업데이트와 동일한 트랜잭션에서 가져 오는 것을 볼 수 있습니다 ... 많은 옵션이 있습니다. 필요한 항목에 따라 다릅니다!

+0

제이슨 감사합니다. 데이터베이스에 메시지 ID를 바이너리로 저장 한 다음 나중에 큐에서 해당 메시지를 제거하는 데 사용합니다. 정말로 나를 던진 것은 MQ Explorer가 메시지 ID 바이트를 명백하게 표현한 것입니다. 그 가치를 얻으려고했지만 불가능한 것처럼 보입니다. –