2015-02-02 3 views
1

IBM MQ의 MQQueue 개체의 속성은 MQQueue.IsOpenMQQueue.OpenStatus입니다. 둘 다 MQManagedObject 클래스에서 상속됩니다. 이 속성들은 무엇을 나타내며 그 차이점은 무엇입니까? 예를 들어 대기열이 GET, PUT 또는 둘 다에 대해 열려 있는지 여부를 보여줍니다.대기열에있는 IBM MQ의 IsOpen 및 OpenStatus 등록 정보의 차이점은 무엇입니까?

불행히도 문서는 이러한 속성에 대해 명확하지 않습니다. 내가 찾은 가장 유용한 설명은 다음과 같습니다. 이것들은 ActiveX 참조에서 가져온 것이므로 어떻게 적용 할 수 있는지 알지 못합니다.

Source

큐가 열려

반환 여부를 ISOPEN 속성입니다.

읽기 전용.

Source

OpenStatus 속성

읽기 전용입니다. 대기열이 열렸는지 여부를 나타냅니다. 초기 값은 AccessQueue 메소드 다음에 TRUE이거나 새로 작성 후 FALSE입니다. 나는 여전히 교육 조언을 찾고 있어요 OpenStatus를 사용하는쪽으로 경향이 있지만

public bool IsOpen 
{ 
    get 
    { 
    return this.objectHandle != null && this.objectHandle.HOBJ != null && (this.objectHandle.HOBJ.Handle != 0 && -1 != this.objectHandle.HOBJ.Handle); 
    } 
} 

public bool OpenStatus 
{ 
    get 
    { 
    bool flag = false; 
    if (this.qMgr != null && this.qMgr.IsConnected) 
     flag = !this.isClosed; 
    return flag; 
    } 
} 

: 다음 단계에서

나는 특성에 대해 다음과 같은 구현을 보여 amqmdnet.dll을 디버깅. 특히 IsOpen 속성이 실제로 무엇을 나타내는 지 확신 할 수 없습니다. 대기열 인스턴스가 put 및 get 호출을 위해 열려 있는지 여부를 말할 때 적합합니까? 내가 거기에 더 좋은 문서,하지만 효과 같아요

+1

나는 당신이 이미 AccessQueue 메서드를 호출했다는 것을 모르는 이유를 잘 모르겠다. –

+0

@MoragHughson 맞습니다. 처음에는 AccessQueue 메소드를 호출 할 때 대기열이 열려 있어야합니다. 그러나 상황은 바뀔 수 있습니다. 큐 관리자가 수동 또는 오류로 중지되었다고 간주하십시오. MQException이 튀어 나오기 전에 이것을 알고 싶습니다. – EKrueger

+1

왜? 그리고 이것이 예외 처리의 전체 요점입니다. 연결 또는 대기열에 문제가 발생하여 코드가이 조건을 처리해야합니다. 즉 재시도 로직/재접속 로직 – Roger

답변

2

: 오픈 콜 자체가 성공했는지

ISOPEN 당신을 알려줍니다, 즉 큐에 대한 유지되고 연결된 핸들이 있습니다.

OpenStatus는 큐 관리자에 유효한 연결이 있는지 여부와 오브젝트가 열려 있는지 여부를 알려줍니다.

오브젝트를 사용하는 가장 좋은 기회가 있는지 알고 싶다면, 필자가 제안한대로 OpenStatus쪽으로 향하고 싶을 것입니다. Morag와 Roger의 의견을 반영하여 더 나은 예외 처리와 상태에 대한 이해가 훨씬 더 나은 접근 방식이어야합니다.