0

我们有一个简单的项目,它从多个端点(代理)获取大量消息。这些代理都输出相同格式的消息(要放置在数据库中的实体对象)。所有代理都写入一个队列,我们​​使用这些并通过 JPA 将它们发送到数据库。

所以本质上,系统有一组生产者将消息写入一个队列。队列是单线程的,只接收消息并将它们转储到数据库中。

这里的问题是这种方法很慢。Camel 中是否有任何功能(例如重新排序),我们可以使用它们来根据它们的来源拆分这些消息。因此,虽然来自 Agent1 的消息需要按照它们创建的顺序进行持久化,但来自 Agent2 的消息是独立的,因此它们不应该按照 Agent1 的消息顺序等待。对于两个代理,这是一个简单的问题,因为我们只需创建两个队列,每个代理一个。我们有很多代理,所以我们需要一个可以扩展的解决方案。

是否有任何模式可以在骆驼中本地完成此任务?我们可以编写自己的保持队列,它与代理名称同步,并且只将一条消息放入多线程 JPA 写入队列,但这将是一种迂回的方式来做我们需要的事情设置从队列到 jpa 骆驼路由的回调,或者我们不会使用骆驼,而只是通过我们自己的管理器来完成(并不是说这会很复杂,但如果我们可以使用骆驼或其他东西来完成这一切,那就太好了并且不必重新发明轮子可以这么说)。

4

1 回答 1

1

如果您的来源是 JMS 消息队列,请查看消息组

Apache ActiveMQ 文档在这里: http ://activemq.apache.org/message-groups.html

这个常见问题解答 http://activemq.apache.org/how-do-i-preserve-order-of-messages.html

基本上您可以使用 JMSXGroupID JMS 属性来标记代理 id,例如 agent1、agent2 等。

然后,您可以在 JMS 消息队列上拥有并发消费者,这些消费者可以基于 JMSXGroupID 并行运行。但仍保留每个组内的顺序。这意味着您可以并行写入 JPA agent1、agent2、... agentN。

于 2011-10-17T07:43:34.447 回答