Servicemix 7.0.1 - сервер cxf запускается слишком медленно после миграции - PullRequest
0 голосов
/ 17 июня 2019

В контексте перехода с 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>

Класс UserDataServiceRest содержит сигнатуру метода и возвращает null какпо старой спецификации верблюда.Я знаю, что теперь он поддерживает интерфейс, но я не уверен, что это может быть причиной моей проблемы.

В версии smx-5 все пакеты запускаются через несколько секунд (для каждого пакета).В smx-7 одни и те же пакеты запускаются как минимум через 2 минуты (для каждого пакета).

Хотя это занимает так много времени, я не вижу никакой активности в журналах.

Обратите внимание, что я такжеУ меня проблема с сервером:

<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>

, который просто отвечает OK для любого запроса (служба ping).

Мои настройки:

  • ServiceMix 7.0.1 ()
    • без встроенного ActiveMQ
    • , установленного в RedHat 7 linux
  • Java JDK 8 (openJDK build 1.8.0_212-b04)

ОБНОВЛЕНИЕ

Когда я пробовал локально (CentOS 6.10), пакет (предоставляющий сервер CXF) запускается примерно через 20 секунд.Но когда он развернут на реальном сервере (RHEL 7), это займет более 2 минут.Я подозреваю, что проблема в сети, но в журналах ничего нет.Конфигурация почти такая же ... Я смотрю на это.

1 Ответ

0 голосов
/ 05 июля 2019

Я нашел решение.

Что подтолкнуло меня к решению, были следующие предупреждающие сообщения в моих журналах:

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 и, вероятно, так как мой сервер не может получить доступ к Интернету,есть тайм-аут.

На данный момент это были только предположения.

После поиска немного об этом предмете в Интернете, я нашел этот jira , который, кажется, имеетисправлено в более высокой версии Camel (начиная с 2.18 и 2.19 согласно билету JIRA).

К сожалению, более стабильной версии ServiceMix с более поздней версией Camel нет, чем 2.16.5.

Затем я попытался обновить ServiceMix 7.0.1 до более новой версии Camel: 2.23.0 (я также пытался с 2.24.1, но многие из моих зависимостей OSGI не работают.)

Примененное мной изменениеis:

  1. в файле 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, \

  2. в файле 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

Aпосле этого * остановите ServiceMix * очистите папку кэша * запустите ServiceMix

(или перезапустите servicemix с параметром clean)

После полного запуска, когда я переустановил свою функциювсе связки начались плавно и быстрее, чем раньше.

Вывод: SM-3390, вероятно, был причиной медленного запуска связок.

...