尝试使用activemq激活优先级后,我被告知尝试使用camel(参见here)。但我无法让它发挥作用,我甚至不确定它应该如何运作。
我在弹簧配置中添加了以下代码:
<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
是什么意思?我在文档中找不到它。答案 0 :(得分:1)
首先,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在发送到队列之前,队列之间或队列与消费者之间对消息(批量)进行排序......