当前位置: 首页 > 知识库问答 >
问题:

Apache Camel/ActiveMQ优先级路由

蒯宏达
2023-03-14

我有两个拥有相同消费者的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可能有成千上万的消息排队,我不能把所有的消息都放在重新定序器批处理中。我在看路由节流,但我不知道如何做到这一点。我还想知道我是否可以通过动物园管理员节点进行同步。如果这个解决方案可行,我需要一些指导。

共有1个答案

李昌勋
2023-03-14

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

第二种选择,使用驼峰重排序器

<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的SEDAendpointhttps://camel.apache.org/seda.html#SEDA-选择BlockingQueueImplementation

 类似资料:
  • 我在这里有一些关于ActiveMQ配置和优先级的类似领域的问题。我目前正在配置ActiveMQ代理以关闭消息持久性。 根据文档,我知道它可以通过代理配置来实现: XML配置文件() 客户端的URI(TCP://localhost:61616?persistent=false) 代理端的 URI-XML配置文件(TCP://localhost:61616?persistent=false)。 我的第

  • 问题内容: 我的网页包含: 引用的样式表包含: 我在ID中有一张表格,希望单元格有一些填充。但是,引用的样式表优先于内联样式。我可以通过Firebug直观地看到这一点。如果我关闭Firebug中的指令,则向左填充将生效。 我该如何上班? 问题答案: 正如其他人提到的那样,您有一个特异性问题。当确定两个规则中的哪一个优先时,CSS引擎会计算每个选择器中的s 数量。如果一个比另一个多,就使用它。否则,

  • 代码生成器用于将Blockly的程序转换为JavaScript,Python,PHP,Lua,Dart等。在为新块编写代码生成器时,最具挑战性的问题是处理操作顺序,以使生成的代码按预期执行。 圆括号 考虑下面的块组装。 如果生成器不知道运算符的优先级,则生成的JavaScript代码将是: alert(2*3+4); 这显然是不正确的,因为乘法运算符会撕裂加法,自己获取“ 3”。一种解决方案是将每

  • 事件的吞没中,我们提到了事件的传递。事件如何传递,先到哪个监听器?这是由优先级决定的。 固定值优先级 使用一个整形的数值,数值较低的监听器比数值较高的监听器,先接收到事件。 场景图优先级 是指向节点对象的指针,z-order 较高的节点中的监听器比 z-order 较低的节点中的,先接收到事件。由于 z-order 较高的节点在顶部绘制,所以使用这种优先级可以确保触摸事件被正确响应 还记得这个场景

  • 问题内容: 我想了解express.js中的顺序优先级。例如,下面的代码 如果请求来自客户端localhost:3000 / api / abc和localhost:3000 / user / abc,则来自api和用户模块的响应。但是,如果我发出类似localhost:3000 / myName / xyz的请求,则应用程序模块将返回响应。此行为使我担心expressjs的优先顺序以及路由器模块

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。