【问题标题】:Apache Camel/ActiveMQ priority routeApache Camel/ActiveMQ 优先路由
【发布时间】:2014-05-23 22:44:58
【问题描述】:

我有两个具有相同消费者的 AMQ 队列。 第一个队列 (Q1) 处理 97% 的消息,而另一个 (Q2) 仅处理 3%。 问题是 Q2 中的消息需要在消息排队后立即处理。 所以我的问题是,当第二季度有消息可用时,我需要以某种方式暂停第一条路由以接收它的消费者。 apache 骆驼路由是这样的:

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

应该使用什么策略? 我认为我不能使用重新排序器,因为第一季度可能有数千条消息排队,我无法将所有消息都放入重新排序器批次中。 我正在查看限制路线,但我不知道该怎么做。 另外我想知道我是否可以通过 zookeeper 节点进行同步。如果此解决方案可行,我将再次需要一些指导。

【问题讨论】:

  • 请注意标签是独立的。也就是说,您不能组合多个标签来创建一个概念。标签[apache][camel] 一起与单个[apache-camel] 标签不同。请务必阅读选择标签时出现的说明!

标签: apache-camel activemq


【解决方案1】:

您可以将所有消息放在一个队列中并使用消息优先级http://activemq.apache.org/how-can-i-support-priority-queues.html

第二个选项,使用 Camel Resequencer

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

第三个选项(Camel 2.12),不使用重测序器,而是使用带有 PriorityBlockingQueue https://camel.apache.org/seda.html#SEDA-ChoosingBlockingQueueimplementation 的 SEDA 端点

【讨论】:

  • 我遇到了这样一种情况,即我的消费者速度很慢,并且在第一季度我可能有很多非优先级消息:“注意,这种权衡可能会对性能产生重大影响,因此您必须测试您的场景彻底。”所以性能是我关心的问题。
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2021-05-18
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多