Apache camel apachecamel/ActiveMQ优先级路由

Apache camel apachecamel/ActiveMQ优先级路由,apache-camel,activemq,Apache Camel,Activemq,我有两个具有相同消费者的AMQ队列。 第一个队列(Q1)处理97%的消息,另一个队列(Q2)仅处理3%。 问题是,Q2中的消息需要在消息排队后立即进行处理。 所以,我的问题是,当第二季度有消息可用时,我需要以某种方式暂停第一条路线,以便将其发送给消费者。 apache camel路由如下所示: <route id="q1"> <from uri="jms:recordAnalysisRequests" /> <to uri="bean:analysi

我有两个具有相同消费者的AMQ队列。 第一个队列(Q1)处理97%的消息,另一个队列(Q2)仅处理3%。 问题是,Q2中的消息需要在消息排队后立即进行处理。 所以,我的问题是,当第二季度有消息可用时,我需要以某种方式暂停第一条路线,以便将其发送给消费者。 apache camel路由如下所示:

<route id="q1">
    <from uri="jms:recordAnalysisRequests" />
    <to uri="bean:analysisService" />
</route>
<route id="q2">
    <from uri="jms:recordAnalysisRequestsFastTrack" />
    <to uri="bean:analysisService" />
</route>

应该使用什么策略? 我不认为我可以使用重排序器,因为Q1可能会有数千条消息排队,并且我无法将所有消息都放入重排序器批处理中。 我正在查看路由节流,但我不知道如何进行。
我还想知道是否可以通过zookeeper节点进行同步。如果这个解决方案可行,我还需要一些指导。

您可以将所有消息放在一个队列中,并使用消息优先级

第二个选项,使用驼峰重排序器

<route id="q1">
    <from uri="jms:recordAnalysisRequests" />
    <setHeader headerName="CustomPriority">
       <constant>2</constant>       
    </setHeader>
    <to uri="direct:analysisDirect" />
</route>
<route id="q2">
    <from uri="jms:recordAnalysisRequestsFastTrack" />
    <setHeader headerName="CustomPriority">
       <constant>1</constant>       
    </setHeader>
    <to uri="direct:analysisDirect" />
</route>
<route id="q3">
    <from uri="direct:analysisDirect">
    <resequence>
        <header>CustomPriority</header>
        <to uri="bean:analysisService" />
    </resequence>
</route>

2.
1.
客户优先权

第三种选择(驼峰2.12),而不是使用重排序器,使用具有优先级阻塞队列的SEDA端点

我遇到了一种情况,即当我有较慢的消费者,并且在第一季度可能有很多非优先级消息时:“注意,这种折衷可能会对性能产生重大影响,因此您必须彻底测试您的场景。”。因此,性能是我关心的问题。请注意,标签是独立的。也就是说,您不能组合多个标记来创建单个概念。标签
[apache]
[camel]
一起与单个
[apachecamel]
标签不同。务必阅读选择标签时出现的说明!