我有两个具有相同消费者的 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>
应该使用什么策略?
我认为我不能使用重新排序器,因为 Q1 可能有数千条消息排队,而我无法将所有消息放入重新排序器批次中。
我正在查看路线限制,但我不知道该怎么做。
我还想知道是否可以通过动物园管理员节点进行同步。如果这个解决方案可行的话,我再次需要一些指导。
您可以将所有消息放入一个队列中并使用消息优先级http://activemq.apache.org/how-can-i-support-priority-queues.html 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 的 SEDA 端点https://camel.apache.org/seda.html#SEDA-选择阻塞队列实现 https://camel.apache.org/seda.html#SEDA-ChoosingBlockingQueueimplementation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)