提问者:小点点

重新排序消息-Artemis


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

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

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

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

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

共1个答案

匿名用户

artemis是否本质上支持使用序列号等属性对队列内的消息重新排序。

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

是否可以在服务器内部运行路由?如果是,您能举个例子或给出留档的链接吗?

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

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

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