几个月来,我们一直在一个接收数据文件、将数据转换为对象并将数据持久化到持久存储的系统上使用 karaf 版本 2.3.3。
最近,我们注意到当 karaf 停止/重新启动时,捆绑包将进入某种锁定状态一段时间。
以下是一系列事件:
1)在 chef 运行期间,当 karaf 关闭时,捆绑包被部署到部署目录中
2)当 karaf 启动时,所有捆绑包和蓝图都正确解析
3)当 karaf 循环时,捆绑包正确解析,但蓝图进入锁定状态,其中大多数已启动,但一个处于停止状态,并且有几个可能处于已解决状态
4)5 分钟(超时)后,停止捆绑包进入解决状态,而其他一些捆绑包进入停止状态状态
5) 某些时候(大部分时间?),如果您等待的时间足够长,所有的 bundle 最终都会进入 Active 状态,系统将完全启动
当 karaf 启动时,我可以使用 karaf 客户端发出“列表”命令并观察捆绑包的启动。它们从:
Installed -> Resolved -> Active 循环,
而蓝图循环从:
blank -> Creating -> Created,在依赖服务出现时偶尔会抛出 GracePeriod。
在所有服务都处于活动状态并且所有蓝图都已创建后,一个包将卡在 Stopping 状态,而其他包将恢复到 Resolved 状态:
[ 136] [Active ] [Created ] [ 80] transformation-services (1.0.3)
[ 137] [Active ] [Created ] [ 80] event-services (0.1.2)
[ 138] [Active ] [Created ] [ 80] ftp-services (0.0.0)
[ 139] [Active ] [Created ] [ 80] ingest-resources (0.0.1)
[ 140] [Active ] [Created ] [ 80] orchestration-app (0.2.3)
[ 141] [Active ] [Created ] [ 80] aws-services (0.4.0)
[ 142] [Resolved ] [ ] [ 80] point-data-service-test (0.2.0)
[ 143] [Active ] [Created ] [ 80] event-consumer-app (1.3.4)
[ 144] [Stopping ] [ ] [ 80] XXXX_no_op_log_transform.xml (0.0.0)
[ 145] [Resolved ] [ ] [ 80] persistence-app (1.3.3)
[ 146] [Active ] [Created ] [ 80] ftp-ingest-endpoint (1.0.2)
[ 147] [Resolved ] [ ] [ 80] secondary_ftp.xml (0.0.0)
[ 148] [Resolved ] [ ] [ 80] event-rest-test (0.0.0)
[ 149] [Resolved ] [ ] [ 80] customer_credentials.xml (0.0.0)
[ 150] [Resolved ] [ ] [ 80] customer1_xml.xml (0.0.0)
[ 151] [Active ] [Created ] [ 80] endpoint-services (0.0.0)
[ 152] [Active ] [Created ] [ 80] scheduler-services (0.1.0)
[ 153] [Active ] [Created ] [ 80] fourhundred_xml.xml (0.0.0)
[ 154] [Active ] [Creating ] [ 80] point-data-service (2.3.3)
[ 155] [Installed ] [ ] [ 80] customer1_csv.xml (0.0.0)
我们有大约 20 个自定义捆绑包,可以执行各种服务。有些描述了在预定执行程序中运行的服务。一些公开 cxf REST 服务。有些是简单的蓝图文件,它们已被放入 karaf deploy 目录。我们使用白板模式从热部署中删除的蓝图文件中发现、注册和访问服务。
我玩过使用功能文件或设置捆绑启动级别,但仍然看到相同的行为。我发现有一些 JIRA 讨论了蓝图同步问题(https://issues.apache.org/jira/browse/KARAF-1724 https://issues.apache.org/jira/ browse/ARIES-1051 ) 但实际上并没有给出任何真正的建议。
有没有人遇到过同样的问题并想出一种可靠的方法来解决它?