2014-09-29 4 views

답변

4

ActiveMQ는 응용 프로그램의 요구 사항에 따라 문제를 해결할 때까지이 문제를 방지하기 위해 아무 것도 시도하지 않습니다. 이러한 상황이 발생하면 우선 순위별로 대기열을 사용하여 대기열에서 부하 분산을 허용하는 것이 좋습니다.

1

Tim Bish의 대답을 확장하면 ActiveMQ에서 이러한 상황을 처리하는 데 사용할 수있는 몇 가지 기능이 있습니다.

virtualDestinationInterceptor 태그 내부에서 이와 같이 높음 및 낮음 프리오 메시지를 걸러 내기 위해 가상 대상을 설정할 수 있습니다.

<virtualDestinations> 
    <compositeQueue name="ALL"> 
    <forwardTo> 
      <filteredDestination selector="JMSPriority &lt; 5" queue="LOW.PRIO"/> 
      <filteredDestination selector="JMSPriority &gt; 4" queue="HIGH.PRIO"/> 
    </forwardTo> 
    </compositeQueue> 
</virtualDestinations> 

그러면 대체 전략으로 here을 사용할 수 있습니다. 하나의 소비자를 LOW.PRIO 대기열에 넣고 HIGH.PRIO 대기열에있는 여러 소비자를 배치합니다. 그런 다음 LOW.PRIO 메시지는 처리되지만 높은 우선 순위 메시지보다 적은 스레드로 처리됩니다.

소비자 응용 프로그램의 선택기를 사용하여 "ALL"대기열에서 직접 메시지를 읽을 수도 있습니다.

관련 문제