Servicemix 7.0.1 - 迁移后 cxf 服务器启动太慢
Servicemix 7.0.1 - cxf server start too slowly after migration
在从 ServiceMix 5.1.4 (smx-5) 迁移到 ServiceMix 7.0.1(最新稳定版本)(smx-7) 的上下文中,我可以在使用 cxf:RsServer
我的骆驼路线是这样的:
from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer&synchronous=true")
.setBody(simple("${body[0]}"))
.marshal(df)
.convertBodyTo(String.class)
.to("{{user.request.endpoint}}")
.process(checkResponseStatusCode())
.unmarshal(df);
在蓝图中我有:
<cxf:rsServer id="rsServer" address="/user-data/v1"
loggingFeatureEnabled="true" depends-on="user-rest-v1"
serviceClass="org.my.company.user.rest.v1.resources.UserDataServiceRest"
staticSubresourceResolution="true">
<cxf:providers>
<bean name="jacksonJsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
<ref component-id="authenticationFilter" />
</cxf:providers>
<cxf:properties>
<entry key="binding">
<ref component-id="mySecurityCxfRsBinding" />
</entry>
</cxf:properties>
</cxf:rsServer>
class UserDataServiceRest 包含方法签名并返回 null
按照旧的骆驼规范。
我知道它现在支持接口,但我不确定这可能是我的问题的原因。
在 smx-5 版本中,所有捆绑包都将在几秒钟内启动(每个捆绑包)。在 smx-7 中,相同的捆绑包至少需要 2 分钟(每个捆绑包)。
虽然花了这么长时间,但我在日志中没有看到任何 activity。
请注意,我也遇到这样的服务器问题:
<jaxrs:server id="pingServiceSvc" address="/ping">
<jaxrs:serviceBeans>
<ref component-id="pingServiceBean" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref component-id="commonExceptionHandler" />
</jaxrs:providers>
<jaxrs:inInterceptors>
<ref component-id="requiredParametersInterceptorBean" />
</jaxrs:inInterceptors>
</jaxrs:server>
它只对任何请求(ping 服务)回答 OK。
我的设置:
- ServiceMix 7.0.1 ()
- 没有嵌入式 ActiveMQ
- 安装在 RedHat 7 上 linux
- Java JDK 8(打开JDK build 1.8.0_212-b04)
更新
当我在本地 (CentOS 6.10) 尝试时,捆绑包(公开 CXF 服务器)会在大约 20 秒内启动。但是当它部署在真实服务器(RHEL 7)上时,它需要超过 2 分钟。
我怀疑是网络问题,但日志中没有任何内容。
配置都差不多。。。正在研究中。
我找到了解决方案。
促使我找到解决方案的是我日志中的这些警告消息:
2019-06-27T09:24:24Z | WARN | NamespaceHandlerRegistryImpl | 34 | NamespaceHandler org.apache.camel.blueprint.handler.CamelNamespaceHandler is behaving badly and should be fixed | | |
2019-06-27T09:24:24Z | WARN | NamespaceHandlerRegistryImpl | 34 | NamespaceHandler org.apache.camel.component.cxf.blueprint.CxfNamespaceHandler is behaving badly and should be fixed | | |
2019-06-27T09:24:24Z | DEBUG | BlueprintContainerImpl | 34 | Running blueprint container for bundle com.mycompany.user.user-rest-v1/1.0.1.SNAPSHOT in state WaitForNamespaceHandlers | | |
2019-06-27T09:24:24Z | WARN | NamespaceHandlerRegistryImpl | 34 | Unable to find namespace handler for http://cxf.apache.org/configuration/beans | | |
CXF 中的命名空间处理程序似乎有问题,可能是因为我的服务器无法访问 Internet,超时了。
目前这些还只是推测。
在 Internet 上搜索了一下这个主题后,我发现 this jira 似乎在更高版本的 Camel 中有修复(根据 JIRA 票据,自 2.18 和 2.19 起)。
不幸的是,没有比 2.16.5 更新的 Camel 更稳定的 ServiceMix 版本。
然后我尝试使用更新版本的 Camel 升级我的 ServiceMix 7.0.1:2.23.0(我也尝试使用 2.24.1,但我的许多 OSGI 依赖项都被破坏了。)
我应用的更改是:
在文件 org.apache.karaf.features.cfg
更改了行:mvn:org.apache.camel.karaf/apache-camel/2.16.5/xml/features, \
与:mvn:org.apache.camel.karaf/apache-camel/2.23.0/xml/features, \
在文件中profile.cfg.erb
更改了行:repository.mvn\:org.apache.camel.karaf/apache-camel/2.16.5/xml/features = mvn:org.apache.camel.karaf/apache-camel/2.16.5/xml/features
与:repository.mvn\:org.apache.camel.karaf/apache-camel/2.23.0/xml/features = mvn:org.apache.camel.karaf/apache-camel/2.23.0/xml/features
之后,
* 停止你的 ServiceMix
* 清理缓存文件夹
* 启动 ServiceMix
(或使用 clean
选项重新启动 servicemix)
完全启动后,当我 re-install 我的功能时,所有捆绑包都以平稳的方式启动,并且比以前更快。
结论:SM-3390 可能是捆绑包启动缓慢的原因。
在从 ServiceMix 5.1.4 (smx-5) 迁移到 ServiceMix 7.0.1(最新稳定版本)(smx-7) 的上下文中,我可以在使用 cxf:RsServer
我的骆驼路线是这样的:
from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer&synchronous=true")
.setBody(simple("${body[0]}"))
.marshal(df)
.convertBodyTo(String.class)
.to("{{user.request.endpoint}}")
.process(checkResponseStatusCode())
.unmarshal(df);
在蓝图中我有:
<cxf:rsServer id="rsServer" address="/user-data/v1"
loggingFeatureEnabled="true" depends-on="user-rest-v1"
serviceClass="org.my.company.user.rest.v1.resources.UserDataServiceRest"
staticSubresourceResolution="true">
<cxf:providers>
<bean name="jacksonJsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
<ref component-id="authenticationFilter" />
</cxf:providers>
<cxf:properties>
<entry key="binding">
<ref component-id="mySecurityCxfRsBinding" />
</entry>
</cxf:properties>
</cxf:rsServer>
class UserDataServiceRest 包含方法签名并返回 null
按照旧的骆驼规范。
我知道它现在支持接口,但我不确定这可能是我的问题的原因。
在 smx-5 版本中,所有捆绑包都将在几秒钟内启动(每个捆绑包)。在 smx-7 中,相同的捆绑包至少需要 2 分钟(每个捆绑包)。
虽然花了这么长时间,但我在日志中没有看到任何 activity。
请注意,我也遇到这样的服务器问题:
<jaxrs:server id="pingServiceSvc" address="/ping">
<jaxrs:serviceBeans>
<ref component-id="pingServiceBean" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref component-id="commonExceptionHandler" />
</jaxrs:providers>
<jaxrs:inInterceptors>
<ref component-id="requiredParametersInterceptorBean" />
</jaxrs:inInterceptors>
</jaxrs:server>
它只对任何请求(ping 服务)回答 OK。
我的设置:
- ServiceMix 7.0.1 ()
- 没有嵌入式 ActiveMQ
- 安装在 RedHat 7 上 linux
- Java JDK 8(打开JDK build 1.8.0_212-b04)
更新
当我在本地 (CentOS 6.10) 尝试时,捆绑包(公开 CXF 服务器)会在大约 20 秒内启动。但是当它部署在真实服务器(RHEL 7)上时,它需要超过 2 分钟。 我怀疑是网络问题,但日志中没有任何内容。 配置都差不多。。。正在研究中。
我找到了解决方案。
促使我找到解决方案的是我日志中的这些警告消息:
2019-06-27T09:24:24Z | WARN | NamespaceHandlerRegistryImpl | 34 | NamespaceHandler org.apache.camel.blueprint.handler.CamelNamespaceHandler is behaving badly and should be fixed | | |
2019-06-27T09:24:24Z | WARN | NamespaceHandlerRegistryImpl | 34 | NamespaceHandler org.apache.camel.component.cxf.blueprint.CxfNamespaceHandler is behaving badly and should be fixed | | |
2019-06-27T09:24:24Z | DEBUG | BlueprintContainerImpl | 34 | Running blueprint container for bundle com.mycompany.user.user-rest-v1/1.0.1.SNAPSHOT in state WaitForNamespaceHandlers | | |
2019-06-27T09:24:24Z | WARN | NamespaceHandlerRegistryImpl | 34 | Unable to find namespace handler for http://cxf.apache.org/configuration/beans | | |
CXF 中的命名空间处理程序似乎有问题,可能是因为我的服务器无法访问 Internet,超时了。
目前这些还只是推测。
在 Internet 上搜索了一下这个主题后,我发现 this jira 似乎在更高版本的 Camel 中有修复(根据 JIRA 票据,自 2.18 和 2.19 起)。
不幸的是,没有比 2.16.5 更新的 Camel 更稳定的 ServiceMix 版本。
然后我尝试使用更新版本的 Camel 升级我的 ServiceMix 7.0.1:2.23.0(我也尝试使用 2.24.1,但我的许多 OSGI 依赖项都被破坏了。)
我应用的更改是:
在文件
org.apache.karaf.features.cfg
更改了行:mvn:org.apache.camel.karaf/apache-camel/2.16.5/xml/features, \
与:mvn:org.apache.camel.karaf/apache-camel/2.23.0/xml/features, \
在文件中
profile.cfg.erb
更改了行:repository.mvn\:org.apache.camel.karaf/apache-camel/2.16.5/xml/features = mvn:org.apache.camel.karaf/apache-camel/2.16.5/xml/features
与:repository.mvn\:org.apache.camel.karaf/apache-camel/2.23.0/xml/features = mvn:org.apache.camel.karaf/apache-camel/2.23.0/xml/features
之后, * 停止你的 ServiceMix * 清理缓存文件夹 * 启动 ServiceMix
(或使用 clean
选项重新启动 servicemix)
完全启动后,当我 re-install 我的功能时,所有捆绑包都以平稳的方式启动,并且比以前更快。
结论:SM-3390 可能是捆绑包启动缓慢的原因。