所以我们有一个骆驼应用程序暂时还可以。它有许多形成一棵大树的路线。
然后我们收到了对某些消息并行的要求。问题是虽然很容易并行化一条路线(在分路器后使用.threads()
或.parallelProcessing()
),但可能会发生两个不同的线程将msgs发送到同一路径(不会运行)并行)因此阻止。
现在我想避免遍历所有应用程序并将所有路由修改为多线程(即使因为这可能会破坏应用程序的行为)。
你能想到的任何解决方案吗?
答案 0 :(得分:2)
您可以尝试在路线中使用SEDA。您可以指定选项concurrentConsumers
以添加另一级别的并发。
您必须注意一些限制。最重要的是,SEDA队列的size
是无限制的。来自Camel文档:
从Camel 2.3开始,默认情况下大小无限制。注意:记住 如果您使用此选项,则其创建的第一个端点 队列名称,用于确定大小。确保所有端点 使用相同的大小,然后在所有这些上配置大小选项,或者 第一个端点正在创建。从Camel 2.11开始,验证是 发生以确保对同一队列使用混合队列大小 name,Camel会检测到这一点并且无法创建端点。
SEDA可以大大加快您的流程,但您必须注意内存消耗和CPU负载。
编辑您也可以查看Camel Disruptor。感谢@mdnghtblue提示。