【问题标题】:Camel application is taking more than one hour to start骆驼应用程序需要一个多小时才能启动
【发布时间】:2018-06-21 15:51:44
【问题描述】:

我们在我们的应用程序中使用带有 JBOSS fuse 的 apache camel 进行集成。我们在一个包下构建了近 80 个 API,骆驼上下文包含 100 多个路由。

当我们在 JBOSS fuse 上部署 bundle 时,所有路由到 UP 并运行大约需要 1 小时,并且 bundle 在部署 1 小时后“启动”。 我们本可以将捆绑包分成多个部分,假设每个捆绑包最多包含 10 个 API,但我们已经在一个捆绑包中开发了我们的应用程序,而且启动要花费很多时间。

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

【问题讨论】:

  • 为什么要创建这么大的捆绑包?
  • 这就是问题所在,我们不想这样做,但捆绑包已经创建。我们希望减少“开始”所需的时间。

标签: jboss apache-camel apache-karaf jbossfuse


【解决方案1】:

首先应该注意——这是一种反模式,不应该重复(看看你刚刚在谷歌上找到这篇文章的 Camel 开发人员)。强>

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

您需要研究路由的某种异步启动。直到所有 OSGi 组件都处于活动状态(包括包激活器、弹簧描述符、scr 组件和蓝图描述符),包才会激活。

如果您的路由是 JMS 消费者,请查看“asyncStartListener”和“asyncStopListener”选项。

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

Camel JMS Component

Camel Startup ordering

【讨论】:

  • 我们正在使用各种骆驼组件,文件(15-20 条路由)、JMS(7-8 条路由)和大约 100 条用于 cxf:rsserver 的路由(15 个 cxf:rsserver 端点,每个端点大约有平均 6-7 条路线)。
  • 哎呀。可能你最好的办法是将所有路由配置为在启动时不启动,并让另一个进程来启动它们——但是,如果你仍然接触到这些路由——为什么不花时间将它们分开并将它们部署为一个功能?
  • 谢谢你,马特,我的问题是一样的 - 除了拆分它之外,还有什么解决方法可以更快地启动捆绑包。我认为拆分是正确的做法。
  • 是的.. 查看我的回复和我提供的链接。将路由配置为不启动,然后在捆绑包处于活动状态时启动它们的进程
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多