2016-11-01 1 views
0

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입니다.

답변

0

포이즌 메시지를 받으면 왜 5 분 동안 일시 중지하는지 확신 할 수 없습니다. 당신이 그것을 아는 경우에 왜 당신은 그것을 멀리 던지거나 더 조사를 위해 철회 대기열에 그것을 통과하지 않는가? JMS 포이즌 메시지 처리를 참조하십시오

http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q032280_.htm

우려스러운보다가, 왜 그렇게 많은 '나쁜'메시지를지고있다?

+0

우리는 다른 많은 응용 프로그램과 대화 중이므로 다시 배포 할 경우 오류가 발생하여 나중에 시도하려고합니다. 우리는 많은 나쁜 메시지를 얻지 못하지만, 몇 번 우리는 많은 중복 메시지를 받았다. ID가 이미 데이터베이스에 있기 때문에 모두 실패합니다. – user1764597

+0

하지만 '나쁜'메시지를 정상적으로 처리하고 다음 메시지를 소비하지 않는 이유는 무엇입니까? –

0

내가 ActiveMQ를 사용하면 그 가능성이 IBM MQ와 함께, 다시 같은 메시지를 보여주고 전에 오분 을 기다리는 큐를 내가 해달라고 말할 수있는 것을 알고있다.

MDB 수신기 쪽에서 재 시도 간격을 클라이언트로 설정해야하므로이 옵션을 다시 설정해야합니다. 그러나 WMQ 측면에는 없습니다.

실패한 메시지를 대기열 밖으로 가져올 수 있습니까?

메시지를 대기열에 다시 배치하거나 유독 한 메시지를 동일한 대기열의 끝에 배치하고 싶습니까? 우리는 같은 큐의 끝에 독 메시지를 이동할 수 없습니다

유독 메시지를 처리하는 세 개의 옵션이 있습니다 :

  1. 들을 다시 큐
  2. 재에 대한 메시지가 메시지를 BOQ 또는 DLQ로 라우팅하십시오.
  3. 퍼지하거나 영구히 버리십시오.