2012-09-04 2 views
0

뮬 플로우에서 예외가있을 때 메시지를 "재시도 대기열"에 전달하는 예외 처리기를 추가하고 싶습니다. 그러나이 재시도 논리가 자동으로 실행되는 것을 원하지 않습니다. 대신 오류를 검토하고 큐에있는 모든 메시지를 다시 시도할지 여부를 결정할 수 있도록 알림을받습니다.뮬 ESB VM 큐의 메시지 수에 대한 쿼리

모든 예외에 대한 알림을 받고 싶지 않습니다. 차라리 15 분마다 실행되는 예약 된 작업을 수행하고이 재시도 대기열에 메시지가 있는지 확인한 다음 알림 만 보내면됩니다.

얼마나 많은 메시지가 현재 영구 VM 대기열에 있는지 확인할 수있는 방법이 있습니까?

답변

1

기본 VM 큐 지속성 메커니즘을 사용하여 VM 커넥터가 vmConnector라는 것을 가정 할 때, 당신은이 작업을 수행 할 수 있습니다

final String queueName = "retryQueue"; 
int messageCount = 0; 

final VMConnector vmConnector = (VMConnector) muleContext.getRegistry() 
    .lookupConnector("vmConnector"); 

for (final Serializable key : vmConnector.getQueueProfile().getObjectStore().allKeys()) 
{ 
    final QueueKey queueKey = (QueueKey) key; 
    if (queueName.equals(queueKey.queueName)) 
    { 
     messageCount++; 
    } 
} 

System.out.printf("Queue %s has %d pending messages%n", queueName, messageCount); 
+0

우수함! 고맙습니다. 나는이 일을하는 더 쉬운 방법이 없다는 것에 놀랐다. 저장소의 모든 메시지를 반복하여 일치하는 이름을 계산하는 것은 매우 비효율적입니다. 그러나 5 분마다 한 번씩이 흐름을 실행할 계획입니다. – Jeff

+1

이것이 기본적으로 사용되는 방법입니다. 'ListableObjectStore'에 의해 지원되는 디폴트'QueueStore'를'PartitionableObjectStore'에 의해 지원되는 것으로 대체 할 수 있습니다. 큐 이름마다 다른 파티션을 사용하십시오. 그런 식으로 올바른 파티션에있는'allKeys(). count'는 메시지 개수를 직접 계산합니다. –

관련 문제