FAQ

1. Проблемы и решения

1.1 AmbiguousMethodCallException

Пример кода, вызывающего ошибку:

<setProperty name="t1"> <simple>${exchangeProperty[t0].replace("es","")}</simple> </setProperty>

Описание ошибки

org.apache.camel.component.bean.AmbiguousMethodCallException: Ambiguous method invocations possible: [public java.lang.String java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence), public java.lang.String java.lang.String.replace(char,char)] on the exchange: Exchange[ID-valery-TravelMate-P215-53-1731680655831-7-1]

Ошибка возникает, когда Camel не может однозначно выбрать подходящий метод для выполнения и выполняет сверку типа параметра с body:

methodInfo.getBodyParameterType().isInstance(body)

где, methodInfo.getBodyParameterType() - java.lang.CharSequence

Поэтому в данном случае ошибка проявляется, если body != String.

Решение

Для того чтобы решить эту проблему, нужно выбрать более однозначный метод:

<setProperty name="t1"> <simple>${exchangeProperty[t0].replaceAll("es","")}</simple> </setProperty>

Использование метода replaceAll() вместо метода replace().

1.2 Восстановление консистентности кластера

Описание проблемы

В некоторых случаях при сбое кластера может возникнуть ситуация, когда один и тот же bundle имеет разные версии и находится одновременно в статусе cluster и в статусе local.

Шаги по восстановлению

  1. Определить проблемный bundle
    Выполните команду, чтобы найти ID проблемного bundle:

    karaf@root()> list
  2. Удалить некорректный bundle
    Используйте команду uninstall, указав ID bundle (например, 583):

    karaf@root()> uninstall 583
  3. Запустить синхронизацию кластера
    Для выравнивания версии bundle на всех узлах кластера выполните:

    karaf@root()> cluster:sync -b

    Флаг -b означает синхронизацию bundle в рамках всего кластера.

1.3 Сервис переходит в статус Starting/Resolved при больших данных

Описание проблемы

При формировании больших объемов данных в REST-сервисе может возникать ошибка, когда сервис (bundle) переходит в статус Starting/Resolved. Это связано с тем, что процесс обработки больших ответов не оптимизирован, что может привести к проблемам с производительностью и превышением ограничений на размер ответа.

Решение

Для формирования ответов с большими объемами данных в REST-сервисах рекомендуется использовать сохраненные FTL-шаблоны, а не вписывать текст непосредственно в маршрут.

1.4 Коннекторы в статусе GracePeriod после перезагрузки

Описание проблемы

Если профиль остановлен (имеет статус Resolved), а коннекторы находятся в статусе Active, то после перезагрузки системы они автоматически переходят в статус GracePeriod. Это ожидаемое поведение системы.

Решение

Чтобы вернуть коннекторы в рабочее состояние, запустите профиль заново.

1.5 Длительный запуск Entaxy ION под Windows

Описание проблемы

При первом запуске Entaxy ION под Windows процесс инициализации может занять значительное время.

Решение

Дождитесь завершения инициализации. Если после запуска возникают проблемы, попробуйте перезапустить систему.

1.6 Особенность обработки additionalProperties с XML в Entaxy ION

Ограничение XML-провайдера

XML-провайдер в Entaxy ION не поддерживает корректную обработку схем, использующих дополнительные свойства (additionalProperties).

2. Лучшие практики

2.1 Как пользоваться встроенным кэшем ignite?

Работающие компоненты camel-ignite:

Компонент Статус Комментарий

ignite-cache

✅ Работает

Запись/чтение данных

ignite-idgen

✅ Работает

Атомарный счётчик

Компонент ignite-cache поддерживает выполнение операций с кэшем в кластерной среде.

Примеры записи данных в кэш

<!-- Вариант 1: -->
<setHeader name="CamelIgniteCacheKey">
  <constant>testKey</constant>
</setHeader>
<setBody>
  <constant>value</constant>
</setBody>
<to uri="ignite-cache:entaxy?operation=PUT" />
<!-- Вариант 2: -->
<bean beanType="com.google.common.collect.ImmutableMap" method="of('testKey', 'value')" />
<to uri="ignite-cache:entaxy?operation=PUT" />
<!-- Вариант 3: -->
<setBody>
  <constant>{"testKey":"value"}</constant>
</setBody>
<to uri="ignite-cache:entaxy?operation=PUT" />