IBM MQ에서 메시지를 읽는 시스템이 있습니다. 이 대기열에서 가끔 데이터가 손상됩니다. 메시지가 다음에 읽 혔을 때 실패하면 청취자는 진행하기 전에 5 분을 기다립니다. 메시지가 3 번 실패하면 백 오프 대기열에 보관됩니다. JMSContainerFacotry는 최대 10 개의 병렬을 실행하도록 설정됩니다. 즉, 큰 메시지의 손상된 메시지를 받으면이 메시지는 백 오프 대기열 (OK 임)에 도달하기 위해 각각 10 분 이상 걸리지 만 결국 모든 스레드가 소모되므로 모든 메시지가 모든 손상을 기다려야합니다. 처리되기 전에 백 오프 대기열. 청취자로부터 wait()를 제거하여 스레드를 차단하지 못하도록하고 싶지만 실패한 메시지는 다시 팝업되기 전에 5 분을 기다립니다.메시지 redelivery ibm mq
ActiveMQ를 사용하면 동일한 메시지가 다시 팝업되기 전에 큐에 5 분 간 대기하도록 알릴 수 있습니다. IBM MQ에서는 그럴 가능성이 없습니다. 실패한 메시지를 대기열에서 꺼낼 수 있습니까? 이제 실패한 메시지가 새로운 메시지 앞에 나타납니다. 또는 실패한 메시지의 jmspriority를 낮추십시오. 아직 실패한 메시지가있는 경우 실패한 메시지가 대기열에서 팝됩니다.
내 청취자는 이렇게에 관한 것입니다 :
@JMSListener()
public void listen(Object message) {
TextMessage textMessage = (TextMessage) message;
if (textMessage.getIntProperty("JMSXDeliveryCount") > 1) {
//pause for 5 minutes
}
//buisness logic
}
(가)에 대기열 IBM MQ이다. AS는 J 보스 6입니다.
우리는 다른 많은 응용 프로그램과 대화 중이므로 다시 배포 할 경우 오류가 발생하여 나중에 시도하려고합니다. 우리는 많은 나쁜 메시지를 얻지 못하지만, 몇 번 우리는 많은 중복 메시지를 받았다. ID가 이미 데이터베이스에 있기 때문에 모두 실패합니다. – user1764597
하지만 '나쁜'메시지를 정상적으로 처리하고 다음 메시지를 소비하지 않는 이유는 무엇입니까? –