Jboss Camel应用程序需要一个多小时才能启动

Jboss Camel应用程序需要一个多小时才能启动,jboss,apache-camel,apache-karaf,jbossfuse,Jboss,Apache Camel,Apache Karaf,Jbossfuse,我们在应用程序中使用ApacheCamel和JBOSS fuse进行集成。我们在一个bundle下构建了将近80个api,camel上下文包含100多条路由 当我们在JBOSS fuse上部署捆绑包时,所有路由都需要将近1小时才能启动并运行,并且捆绑包在部署1小时后就“启动”。 我们可以将捆绑包分为多个部分,每个捆绑包最多有10个API,但我们已经在一个捆绑包中开发了应用程序,启动它需要花费大量时间 除了将捆绑包拆分为更小的捆绑包之外,还有什么方法可以减少捆绑包“启动”的时间吗?首先需要注意的是

我们在应用程序中使用ApacheCamel和JBOSS fuse进行集成。我们在一个bundle下构建了将近80个api,camel上下文包含100多条路由

当我们在JBOSS fuse上部署捆绑包时,所有路由都需要将近1小时才能启动并运行,并且捆绑包在部署1小时后就“启动”。 我们可以将捆绑包分为多个部分,每个捆绑包最多有10个API,但我们已经在一个捆绑包中开发了应用程序,启动它需要花费大量时间


除了将捆绑包拆分为更小的捆绑包之外,还有什么方法可以减少捆绑包“启动”的时间吗?

首先需要注意的是——这是一种反模式,不应该重复(看看你的骆驼开发者,他刚刚在谷歌上搜索并找到了这篇文章)。

Karaf/JBoss Fuse绝对可以扩展到每个实例100条路由(我在一个实例中成功地运行了500条),但不建议将100条不同的路由放在一个包中——永远不要。您将失去大量的过程控制、启动顺序管理以及根据需要将部署调整为多个容器的灵活性

您需要研究路由的某种异步启动。在所有OSGi组件都处于活动状态(包括捆绑激活器、spring描述符、scr组件和蓝图描述符)之前,捆绑包不会处于活动状态

如果您的路由是JMS使用者,请查看“asyncStopListener”和“asyncStopListener”选项

另一个选项是禁用在bundle激活时启动路由,允许bundle处于活动状态,然后通过另一个进程(以线程方式),并开始在所有路由上调用route.start()


为什么要创建这么大的捆绑包?这就是问题所在,我们不想创建,但捆绑包已经创建好了。我们希望减少“开始”所需的时间。我们正在使用各种camel组件、文件(15-20个路由)、JMS(7-8个路由)和大约100个cxf:rsserver路由(15个cxf:rsserver端点,每个端点平均大约有6-7个路由)。Yikes。也许您最好的办法是配置所有路由,使其在启动时不启动,并让另一个进程来启动它们--但是,如果您仍在触摸路由--为什么不花时间将其分离并作为功能部署?谢谢Matt,我的问题也是一样——除了拆分包之外,是否有其他方法可以更快地启动包。我认为分开是正确的做法。是的。。查看我的回复和我提供的链接。将路由配置为不启动,然后让一个进程在捆绑激活后启动它们