使用Apache Camel SEDA队列的Apache Camel Resequencer?

时间:2013-12-09 13:08:24

标签: apache apache-camel

我有一个使用参数“concurrentConsumers = 5”的SEDA队列。现在,我正在尝试将其与Apache Camel Resequencer集成,以便能够在处理消息之前对消息进行重新排序,但是,当我这样做时,一次只处理一条消息。我想知道是否可以并行运行多个重定序器消息。

这是我的XML代码:

        <route>
            <from uri="seda:barSetup?concurrentConsumers=5" />
                <resequence>
                <batch-config batchSize="300" batchTimeout="40000" 
                 allowDuplicates="true"/>
                    <simple>in.header.priority</simple>
                    <to uri="exec:cat" />      
                    <to uri="bean:batchjobMonitor" />
                    <to uri="log:output" />
                </resequence>
            </route>

我对排队或骆驼不太熟悉,如果这是一个愚蠢的问题,对不起。

感谢。

1 个答案:

答案 0 :(得分:3)

最后我解决了这个问题,不使用重定序器。我使用了PriorityBlockingQueueFactory,在比较器中我使用了类似的重定序器来骆驼:

    <bean id="priorityQueueFactory"
        class="org.apache.camel.component.seda.PriorityBlockingQueueFactory">
        <property name="comparator">
            <bean class="com.sg.sgf.service.queues.MyExchangeComparator" />
        </property>
    </bean>

然后,在路线中:

        <route>
            <from uri="seda:priority?queueFactory=#priorityQueueFactory&amp;size=100&amp;concurrentConsumers=5&amp;pollTimeout=10000" />
            <!-- <resequence>
                <batch-config batchSize="300" batchTimeout="40000"
                    allowDuplicates="true" />
                <simple>in.header.priority</simple> -->
                <to uri="exec:cat" />       <!-- the actual executable is set in the job that is passed to the queue -->
                <to uri="bean:batchjobMonitor" />
                <to uri="log:output" />
            <!-- </resequence> -->
        </route>

有了这个,我就拥有了我想要的东西。