如何使我在骆驼的所有路线变得异步?

时间:2015-01-16 17:35:54

标签: multithreading apache-camel

所以我们有一个骆驼应用程序暂时还可以。它有许多形成一棵大树的路线。 然后我们收到了对某些消息并行的要求。问题是虽然很容易并行化一条路线(在分路器后使用.threads().parallelProcessing()),但可能会发生两个不同的线程将msgs发送到同一路径(不会运行)并行)因此阻止。 现在我想避免遍历所有应用程序并将所有路由修改为多线程(即使因为这可能会破坏应用程序的行为)。

你能想到的任何解决方案吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试在路线中使用SEDA。您可以指定选项concurrentConsumers以添加另一级别的并发。

您必须注意一些限制。最重要的是,SEDA队列的size是无限制的。来自Camel文档:

  

从Camel 2.3开始,默认情况下大小无限制。注意:记住   如果您使用此选项,则其创建的第一个端点   队列名称,用于确定大小。确保所有端点   使用相同的大小,然后在所有这些上配置大小选项,或者   第一个端点正在创建。从Camel 2.11开始,验证是   发生以确保对同一队列使用混合队列大小   name,Camel会检测到这一点并且无法创建端点。

SEDA可以大大加快您的流程,但您必须注意内存消耗和CPU负载。

编辑您也可以查看Camel Disruptor。感谢@mdnghtblue提示。