2013-08-23 4 views
1

일부 애플리케이션을 실행하는 4 노드 websphere 애플리케이션 서버 클러스터가 있습니다. 응용 프로그램은 websphere mq server의 대기열을 수신합니다. 클러스터 범위에서 jms 자원을 만들었으므로 모든 노드가 동일한 큐 관리자에 연결되고 큐의 열린 입력 개수는 mq 탐색기에서 4입니다. 문제는 메시지가 큐에 게시되고 노드 중 하나가 메시지를 가져와 처리를 시작하지만 메시지 헤더가 잘못되었다는 오류가 발생합니다. 3 개의 노드를 종료하고 하나만 실행하면 해당 노드의 응용 프로그램에서 메시지를 읽고 처리를 시작합니다. 나는 읽기 경합이 mq에서 문제가 아니라고 생각하지만 사실은 다른 방향을 가리킨다. 읽기 잠금과 같은 대기열에 일부 속성을 설정하는 방법이 있습니까? 아니면 4 개의 노드에 메시지를 공정하게 배포하는 스케줄러와 같은 것이 있습니까?Websphere MQ 서버 대기열 읽기 경쟁 조건을 어떻게 해결합니까?

답변

0

GET 대신에 을 사용하여 동기 점에서 메시지를 읽으면 ROLLBACK이 발행되지 않는 한 다른 스레드가 메시지를 검색 할 수 없습니다. 메시지가 처리 할 수 ​​있다고 확인되면 완료되면 COMMIT을 발행하십시오.

반면에 메시지가 BROWSE이면 모든 스레드가 동일한 메시지를 검색 할 수 있습니다.

무슨 일이 일어나 든간에 같은 메시지에 대한 스레드 경합이 어떤 식 으로든 메시지를 손상시킬 수는 없습니다. 메시지가 탐색되는지 또는 파괴적으로 검색되는지에 관계없이 WMQ는 호출의 무결성 및 원자 적 작동을 보장합니다. 이를 진단하려면 전송 제공자의 원시 리턴 코드가 포함될 링크 된 예외의 인쇄를 포함하여 정확한 오류에 대한 자세한 정보가 필요합니다.

+0

좋아, 내가 바보 였어. 응용 프로그램에 하나의 노드 파일 시스템에만 넣는 입력 xsd가 필요했다. 그래서 이것은 정말로 문제가되지 않습니다. 라운드 로빈 방식으로 모든 네 개의 노드에 메시지를 서버하는 스케줄러와 같은 것을 구현하여 설정을 향상시킬 수 있습니까 ?? – user1600936

+0

WMQ는 모든 노드가 처리 할 수있는 속도보다 빠른 속도로 제공되는 경우 라운드 로빈 방식으로 메시지를 배포합니다. 그러나 GET 요청이 만들어지면 효율성을 위해 스택에 푸시됩니다. 따라서 느리게 도착하면 하나 또는 두 개의 스레드 만 처리 할 수 ​​있습니다. 협업 브라우징 기능을 사용하여 라운드 로빈을 수행하는 메시지 발송자를 작성할 수는 있지만 솔직히 그럴 가치가있는 것으로 보입니다. 메시지 분 h를 테스트하려면, 큐를로드 한 다음 모든 메시지를 입력 큐에 즉시 복사하십시오. 그러면 라운드 로빈 동작이 나타납니다. –