重新排序消息 - Artemis

时间:2017-11-16 15:20:58

标签: jms activemq messaging activemq-artemis

我必须运行同一个应用程序的两个实例,它们从'queue-1'读取消息并将它们写回另一个队列'queue-2'。

我需要在两个队列中的消息按特定属性(序列号)排序,该属性最初由生产者添加到每个消息中。根据文档,在queue-1内部,消息的顺序将保留,因为消息由单个生产者发送。但是由于有多个使用者读取,处理并将处理过的消息发送到队列2,因此队列2中的消息顺序可能会丢失。

所以我的任务是确保消息以与从queue-1读取的顺序相同的顺序传递到queue-2。我已经实现了Apache camel的重定序器模式,以重新排序queue-2中的消息。重定序器工作正常,但随着camel路由在本地运行,导致数据传输开销。

考虑以更好的方式做到这一点,我有三个问题:

  1. artemis本身是否支持对内部消息的重新排序 使用序列号等属性排队。
  2. 是否可以在服务器内运行路由?如果是的话,你能吗? 举一个例子或给出文档的链接?
  3. 某些artemis功能,如转移(拆分)需要修改 代理配置(broker.xml文件),有没有办法做到这一点 以编程方式动态,以便我可以决定何时开始 转移消息?我知道这可以通过使用骆驼来实现, 但我希望一切都在服务器上运行。

1 个答案:

答案 0 :(得分:1)

  

artemis本身是否支持使用序列号等属性重新排序队列中的消息。

没有。在我看来,骆驼真的是最好的解决方案。

  

是否可以在服务器内运行路由?如果是,您可以举例或提供文档链接吗?

您应该能够使用具有Camel上下文的Web应用程序在Artemis中执行与ActiveMQ 5.x中相同的操作。 5.x文档是here

  

某些artemis功能,例如divert(split)需要修改代理配置(broker.xml文件),有没有办法以编程方式动态地执行它们,以便我可以决定何时开始转移消息?

您可以使用Artemis管理方法在运行时以编程方式(或管理方式)创建,修改和删除转移。但是,这些修改将是不稳定的(即它们在代理重新启动后仍然存在)。