0

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

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

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

考虑以更好的方式做这件事,我有三个问题: 

  1. artemis 是否固有地支持使用诸如序列号之类的属性对队列内的消息进行重新排序。
  2. 是否可以在服务器内部运行路由?如果是,您能否举个例子或提供文档链接?
  3. 一些 artemis 功能,如转移(拆分)需要修改代理配置(broker.xml 文件),有没有办法以编程和动态方式完成它们,以便我可以决定何时开始转移消息?我知道这可以通过使用骆驼来完成,但我希望一切都在服务器中运行。
4

1 回答 1

1

artemis 是否固有地支持使用诸如序列号之类的属性对队列内的消息进行重新排序。

不,在我看来,Camel 确实是最好的解决方案。

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

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

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

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

于 2017-11-16T17:17:35.883 回答