消息的重新排序 - Artemis

Re-ordering of messages - Artemis

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

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

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

考虑以更好的方式进行,我有三个问题:

  1. artemis 本身是否支持在 使用 属性 队列,例如序列号。
  2. 是否可以运行服务器内部的路由?如果是的话,你能 举个例子或者给文档一个link?
  3. 部分artemis功能如divert(split)需要修改 经纪人配置(broker.xml 文件),有没有办法做到这一点 以编程方式和动态方式,以便我可以决定何时开始 转移信息?我知道这可以通过使用骆驼来完成, 但我希望服务器中的所有内容都 运行ning。

Does artemis inherently supports re-ordering of messages inside a queue using a property such as sequence number.

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

Is it possible to run the routes inside the server? If yes, can you give an example or give a link to the documentation?

您应该能够在 Artemis 中使用带有 Camel 上下文的 Web 应用程序在 ActiveMQ 5.x 中做同样的事情。 5.x 文档是 here.

Some artemis features such as divert (split) requires modifying broker configuration (broker.xml file), is there a way to do them programatically and dynamically so I can decide when to start diverting message?

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