이하 MQ에서 정보를 가져와 DB에 저장하는 Java MQ GET 루틴을 게시했습니다.
그러나 GET과 COMMIT 사이의 연결이 끊어 질 때 문제가 발생합니다.
연결이 끊어지면 COMMIT으로 해석됩니다. 그런 다음 데이터가 손실됩니다.java 구체적인 MQ GET 및 COMMIT/BACKOUT을 구현하는 방법
콘크리트를 어떻게 구현해야합니까? & COMMIT/BACKOUT 모델 ??? 커밋되지 않은 요청이있는 동안 프로그램이 MQDISC 호출을 발행하는 경우
String hostName = "192.168.163.63";
int port = 1418;
String userId = "mq";
String password = "mq";
String queueManagerName = "QueueManager1418";
String channelName = "ServerChannel";
String queueName = "TestQueue";
MQEnvironment.hostname = hostName;
MQEnvironment.port = port;
MQEnvironment.userID = userId;
MQEnvironment.password = password;
MQEnvironment.channel = channelName;
try {
MQQueueManager qMgrIn1 = new MQQueueManager(queueManagerName);
int openOptionsIn1 = CMQC.MQOO_INPUT_SHARED | CMQC.MQOO_INQUIRE;
MQQueue queueIn1 = qMgrIn1.accessQueue(queueName, openOptionsIn1);
MQMessage getMessage1 = new MQMessage();
MQGetMessageOptions mqGetMessageOptions1 = new MQGetMessageOptions();
mqGetMessageOptions1.options = CMQC.MQGMO_SYNCPOINT;
queueIn1.get(getMessage1, mqGetMessageOptions1);
String txt1 = getMessage1.readLine();
System.out.println("get1 << " + txt1);
//////////// make problem point like network disconnect with MQ server
DoSaveInfo2DB();
qMgrIn1.commit();
if (queueIn1 != null)
queueIn1.close();
if (qMgrIn1 != null)
qMgrIn1.disconnect();
} catch (Exception ex) {
System.out.println("ex.getMessage() = " + ex.getMessage());
}
는 IBM의 MQ 문서에서, 나는 RRS와 z/OS의 배치를 제외하고 울부 짖는 소리 텍스트를
을 발견, 내재적 동기 점가 발생합니다. 프로그램이 비정상적으로 종료되면 암시 적 철회가 발생합니다. z/OS에서 처음으로 MQDISC를 호출하지 않고 프로그램이 정상적으로 끝나면 암시 적 동기 점이 발생합니다. MQ에 연결된 TCB가 정상적으로 종료되면 프로그램은 정상 종료 된 것으로 간주됩니다. z/OS UNIX 시스템 서비스 및 언어 환경 (LE)에서 실행 중일 때 비정상 종료 또는 신호에 대한 기본 조건 처리가 호출됩니다. LE 조건 핸들러는 오류 조건을 처리하고 TCB는 정상적으로 종료됩니다.
이 조건 하에서 MQ는 작업 단위 (UOW)를? L 트합니다.
응용 프로그램이 이전/백 아웃을 커밋 MQ 서버 & DB (네트워크 문제)와 연결이 끊어진 경우 의미
, MQ가 자동으로 COMMIT 및 결과에서 우리가 잃어버린 !!!!
조언 해 주셔서 감사합니다. Windows에서 앱을 실행하고 있습니다. 어떤 응용 프로그램이 종료 될 수 있는지 (커밋 및 연결 끊기 전에) (비정상적으로 끝나는) 위치를 기록한 다음 커밋되지 않은 메시지를 취소합니다. 문제는 여기 내가 자동으로 제거하려는 것입니다 (Windows에서는 ZOS가 아닐 수도 있습니다 !!!). 제가 올바르게 이해한다면, 제 2 단계 UOW 구현을위한 제 2 Trans Management가 없습니다. 어떤 조언을 해주셔서 감사드립니다. –
비정상 종료의 기본 동작은 변경할 수 없습니다. 당신은 get을하고 연결이 끊어진다면 메시지가 큐에 다시 저장되므로 (나중에 처리 할 수 있도록) 좋은 일임을 깨닫습니다.2 단계 UOW를 원하면 Java/MQ 확장 트랜잭션 클라이언트 (XA)를 사용하십시오. – Roger