Включение Приоритета с помощью activemq с использованием верблюда - PullRequest
2 голосов
/ 16 января 2012

После попытки активировать приоритет с помощью activemq мне сказали попробовать использовать верблюда (см. здесь ). Но я не могу заставить его работать, и я даже не уверен, как это должно работать.

Я добавил следующий код в конфигурацию Spring:

<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)

1 Ответ

1 голос
/ 17 января 2012

Во-первых, конечная точка mock предназначена для модульного тестирования. Вы можете использовать его для проверки того, что ожидаемые сообщения были получены:

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

Далее, resequencer предназначен для упорядочения сообщений на основе некоторого атрибута (в вашем случае заголовка "JMSPriority") и будет выполнять это для всех сообщений, которые проходят через него в течение заданного периода времени ожидания или пакета размер (по умолчанию размер пакета равен 100, а время ожидания составляет 1000 мс).

Короче говоря, вы можете использовать resequencer для упорядочения сообщений (в пакетах) перед их отправкой в ​​очередь, между очередями или между очередью и получателем ...

...