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.
|
Решение Для того чтобы решить эту проблему, нужно выбрать более однозначный метод:
Использование метода replaceAll() вместо метода replace(). |
1.2 Восстановление консистентности кластера
Описание проблемы
В некоторых случаях при сбое кластера может возникнуть ситуация, когда один и тот же bundle имеет разные версии и находится одновременно в статусе cluster и в статусе local.
|
Шаги по восстановлению
|
1.3 Сервис переходит в статус Starting/Resolved при больших данных
Описание проблемы
При формировании больших объемов данных в REST-сервисе может возникать ошибка, когда сервис (bundle) переходит в статус Starting/Resolved. Это связано с тем, что процесс обработки больших ответов не оптимизирован, что может привести к проблемам с производительностью и превышением ограничений на размер ответа.
|
Решение Для формирования ответов с большими объемами данных в REST-сервисах рекомендуется использовать сохраненные FTL-шаблоны, а не вписывать текст непосредственно в маршрут. |
1.4 Коннекторы в статусе GracePeriod после перезагрузки
Описание проблемы
Если профиль остановлен (имеет статус Resolved), а коннекторы находятся в статусе Active, то после перезагрузки системы они автоматически переходят в статус GracePeriod. Это ожидаемое поведение системы.
|
Решение Чтобы вернуть коннекторы в рабочее состояние, запустите профиль заново. |
2. Лучшие практики
2.1 Как пользоваться встроенным кэшем ignite?
Работающие компоненты camel-ignite:
| Компонент | Статус | Комментарий |
|---|---|---|
|
✅ Работает |
Запись/чтение данных |
|
✅ Работает |
Атомарный счётчик |
Компонент 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" />