我们在项目中使用ActiveMQ,消息由不同的生产者同时写入到同一队列的ActiveMQ中。因此,排序是混乱的。消息在被消费者消费之前是否可以在队列中重新排序?
例如,producer A produced messages -> M1,M2,M3 (自定义头部属性为1,2,3)生产者B produced messages M3 -> M4,M5,M6 (自定义头部属性为4,5,6)。
由于竞争条件,我们将消息作为M1、M4、M5、M2、M3、M6发送到队列。
我们是否可以使用自定义标头属性按所需的顺序对消息进行重新排序,如: M1、M2、M3、M4、M5、M6?
注意:我们没有在我们的项目中使用Java。我们正在使用Mulesoft来生成和消费与ActiveMQ之间的消息。
我已经看到了与我们的问题类似的this link,但当我按照步骤操作时,链接中提供的解决方案不是很清楚,或者更确切地说是不起作用。
发布于 2020-03-01 02:03:51
如果无法确保消息以正确的顺序发送,那么Camel's resequencer是一个很好的解决方案。下面是一个简单的例子:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="activemq:queue:unordered"/>
<resequence>
<simple>in.header.seqnum</simple>
<to uri="activemq:queue:ordered" />
<stream-config capacity="5000" timeout="4000"/>
</resequence>
</route>
</camelContext>
此路由将从unordered
队列中读取消息,然后根据消息头seqnum
对它们进行重新排序,然后将它们发送到ordered
队列。因此,您的应用程序应该从ordered
队列中读取重新排序的消息。
该Camel documentation非常全面,因此您应该参考它以获取更多详细信息。
https://stackoverflow.com/questions/60467573
复制相似问题