2012-01-16 4 views
2

activemq로 우선 순위를 설정하려고 시도한 후 낙타를 사용해 보았습니다 (here 참조). 그러나 나는 그것을 작동시키지 못하고, 그것이 어떻게 작동해야하는지조차 확신하지 못한다.낙타를 사용하여 activemq에서 우선 순위 설정 활성화

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
    <from uri="jms:queue:myqueue" /> 
    <resequence> 
     <batch-config batchSize="200" batchTimeout="3000" allowDuplicates="true" reverse="true"/> 
     <header>JMSPriority</header> 
    <to uri="mock:result"/> 
    </resequence> 
    </route> 
</camelContext> 

<bean id="jmsConfig" class="org.apache.camel.component.activemq.ActiveMQConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory"/> 
    <property name="transacted" value="false"/> 
    <property name="concurrentConsumers" value="10"/> 
</bean> 

<bean id="activemq" class="org.apache.camel.component.activemq.ActiveMQComponent"> 
    <property name="configuration" ref="jmsConfig"/> 
</bean> 

그러나이 구성은 (아무것도 주문하지 않습니다) 작동하지 않습니다, 나는 몇 가지 질문이 있습니다 :

내 스프링 구성에서 다음 코드를 추가 한

  • mock:result의 의미는 무엇입니까? 문서에서 찾을 수 없습니다.
  • 낙타는 대기열 순서를 바꾸거나, 메시지를 만든 후 또는 메시지를 추가 할 때 어떻게해야합니까?
  • spring activemq 기본 구성과 독립적 일 수 있습니까? (저는 여기에 낙타 ActiveMQComponent를 사용합니다)
+0

어쨌든 ? –

답변

1

첫째, mock 엔드 포인트는 단위 테스트 용입니다. 의 resequencer 일부 속성 (헤더 귀하의 경우 "JMSPriority")에 따라 메시지를 주문 설계

MockEndpoint resultEndpoint = context.resolveEndpoint("mock:result", MockEndpoint.class); 
resultEndpoint.expectedMessageCount(3); 
resultEndpoint.expectedBodiesReceived("firstMessageBody", "secondMessageBody", "thirdMessageBody"); 
resultEndpoint.message(0).header("foo").isEqualTo("bar"); 

다음을 모든 메시지를 통해이 작업을 수행합니다 : 당신은 예상 메시지가 수신되었는지 확인하는 데 사용할 수 있습니다 주어진 시간 초과 기간 또는 일괄 처리 크기 (기본적으로 일괄 처리 크기는 100이고 시간 초과는 1000 밀리 초)에 걸쳐이를 통과합니다.

... 당신은 그들이 큐와 소비자 사이에 큐 사이에 나에에, 큐에 전송되기 전에 (일괄) 메시지를 주문하는 resequencer를 사용할 수

길고도 짧은 이야기 왜 낙타를 사용하는

+0

그래서 내가 제대로 이해한다면, 큐는 다시 정렬되고, 동시에 결과는 모의 엔드 포인트로 보내 집니까? Ho, timeout 및 batchsize 옵션은 메시지가 약간 주문 된 것처럼 보일지라도 영향을 미치지 않습니다. – nicompte

+0

Camel은 대기열을 직접 재정렬 할 수 없으며 단순히 경로/끝점을 통해 보내는 메시지에 대해 작동합니다. 따라서 소비자와 대기열 (대기열) .resequencer (...). (consumer)] 사이에 대기열을 넣으면 메시지 순서가 바뀝니다 (AMQ의 JMSPriority가하는 것과 유사). .. 단지 메시지 순서에 대해 더 많은 제어와 유연성을 제공합니다. –

+0

은 여기에서 사용할 수있는 실제 예제입니다 .https : //svn.apache.org/repos/asf/camel/trunk/camel-core/src/ test/java/org/apache/camel/processor/ResequenceStreamIgnoreInvalidExchangesTest.java –