JCachePolicy в Camel 2

Я хочу реализовать кеширование контента на моих маршрутах Camel 2.23.2. Во время исследования я наткнулся на компонент Camel JCache, который согласно документации , должен иметь JCachePolicy, который:

JCachePolicy - это перехватчик маршрута, который кэширует результат маршрута - тело сообщения - после завершения маршрута. Если в следующий раз маршрут вызывается с аналогичным Exchange, кэшированное значение используется в Exchange вместо выполнения маршрута.

Это в основном именно то, что я ищу. Однако, как оказалось, эта политика доступна только в Camel 3.x и выше. Итак, мой вопрос: как мне воссоздать эту функциональность в Camel 2.23.2?


person Deddiekoel    schedule 07.12.2020    source источник


Ответы (1)


Решение было довольно простым. В ветка Camel 3.x пакет политик доступен и в нем всего два файла. Актуальная политика и процессор.

Оказывается, ожидая дальнейшего тестирования, эти файлы работают очень хорошо с небольшой корректировкой.

В политике вам нужно изменить определение метода для методов wrap и beforeWrap. Для них требуется routeContext, а не Route. Но перейти от RouteContext к маршруту достаточно просто. В процессоре основное изменение заключается в использовании правильного пакета для DelegateAsyncProcessor, который он расширяет.

С этими изменениями все работает так, как задокументировано. Я использовал стартер загрузки ehcache spring в моем pom без каких-либо дополнительных изменений, чтобы он работал с ehcache в качестве cachemanager.

Еще одно замечание: когда вы хотите использовать это, модель, которую вы хотите кэшировать, должна быть сериализуемой.

person Deddiekoel    schedule 08.12.2020