2010-06-01 5 views
1

아래 코드로 MQ를 연결 중입니다. MQ에 성공적으로 연결할 수 있습니다. 내 경우 MQ에 메시지를 한 번씩 넣습니다. 케이블을 분리하면 ResonCode 오류가 발생하지만 IsConnected 속성은 계속 true로 표시됩니다. 연결이 아직 연결되어 있는지 확인하는 것이 올바른 방법입니까? 아니면 그 주위에 어떤 좋은 pratcices.MQ 연결 - 2009 오류

응용 프로그램을 시작할 때 연결을 열어보고 싶습니다.

공공 정적 MQQueueManager에 ConnectMQ() {

경우 ((여기서 queueManager == NULL) || (! queueManager.IsConnected) || (queueManager.ReasonCode의 == 2009)) { 여기서 queueManager = 새로운 MQQueueManager에(); } return queueManager; }

답변

2

WMQ 클라이언트 연결의 동작은 유휴 상태 일 때 API 호출이 실패하거나 연결 시간이 초과 될 때까지 연결되는 것처럼 보입니다. 따라서 isConnected()는 get, put 또는 inquire 호출이 시도되고 실패 할 때까지 true를보고합니다. 그러면 QMgr은 연결이 끊어진 것으로보고합니다.

여기에서 고려해야 할 다른 사항은 2009 년만으로는 얻을 수있는 유일한 코드가 아니라는 것입니다. 그것은 연결이 끊어 지지만 QMgr 종료, 채널 종료 및 다양한 자원 및 기타 오류에 대한 연결 코드가있을 때 발생합니다.

일반적으로 상수 연결을 유지해야하는 경우 연결 및 메시지 처리 루프를 while 문 내에 중첩 된 try/catch 블록 안에 넣기를 원할 것입니다. 의도적 인 이탈이 아닌 다른 예외를 발견하면 개체와 QMgr을 닫고 5 초 이상 잠자기 한 후 잠시 동안 루프를 돌립니다. 수면은 매우 중요합니다. 단단한 재 연결 루프에 걸려 QMgr에서 수 백 번의 연결 시도가 발생하면 메인 프레임 QMgr조차도 무릎을 꿇을 수 있기 때문입니다.

다른 대안은 v7 WMQ 클라이언트와 QMgr을 사용하는 것입니다. 이 조합을 사용하면 자동 재 연결을 채널 구성으로 구성 할 수 있습니다.