Как обрабатывать код, когда memchache не работает (simple-spring-memcached)

Благодаря «Руководству по началу работы» в «simple-spring-memcached» мне удалось заставить memcached работать в моем проекте, используя пример «Spring 3.1» в руководстве, я использую «spymemcached» в качестве поставщика. Все работает хорошо, когда сервер memcached запущен и работает. Однако, когда сервер memcache недоступен (преднамеренно отключен для тестирования), код подчеркивания не работает, и приложение не будет выполняться, просто выдавая исключение времени выполнения, заявляя, что невозможно подключиться к серверу memcache, и происходит тайм-аут.

Caused by: net.spy.memcached.internal.CheckedOperationTimeoutException: Timed out waiting

Однако в этом сценарии я ожидаю, что целевой метод будет выполняться каждый раз, когда кеш недоступен, а не полностью блокировать путь выполнения. Возможно ли это с помощью простого весеннего кэша памяти? , есть ли у кого-нибудь опыт в этом? как мне решить эту ситуацию? Любое исключение на уровне кеша не должно мешать выполнению, просто нужно вызвать целевой метод в качестве резервного варианта. Это то, чего я пытаюсь достичь.

Я пробовал использовать spring CompositeCacheManager с fallbackToNoOpCache, но похоже, что simple-spring-memcached не влияет на это.

Вся моя конфигурация точно похожа на (весна 3.1)

https://code.google.com/p/simple-spring-memcached/wiki/Getting_Started

Спасибо за вашу помощь

например: использование моего @Cacheable

@Cacheable(value="books", key="#isbn")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)

person csf    schedule 11.03.2014    source источник


Ответы (1)


Вы правы, это должно работать так, как вы описали, и я уверен, что в случае аннотаций SSM (@ReadThrough*, ​​@Update*, ​​@Invalidate *) это работает таким образом. Я вижу, что для аннотаций Spring Cache поведение отличается. сегодня постараюсь исправить. Если вы не возражаете, не могли бы вы создать проблему для этой ошибки на странице github SSM.

person ragnor    schedule 12.03.2014
comment
Спасибо, Рагнор, спасибо за быстрый ответ, блестящая работа и ценю вашу помощь. По вашему запросу я создал ошибку на странице выше. - person csf; 12.03.2014
comment
Также я обнаружил, что если я использую «xmemcached», он работает так, как ожидалось. - person csf; 12.03.2014
comment
Великолепно, я попробую это и дам вам знать. Спасибо и признателен за ваш быстрый ответ! - person csf; 14.03.2014
comment
Аналогично, при работе с реализацией AWS (com.google.code.ssm.providers.elasticache.MemcacheClientFactoryImpl) выдаются ошибки java.nio.channels.UnresolvedAddressException, если кластер memcached недоступен. Я бы ожидал, что будет вызван базовый метод и, возможно, просто зарегистрирует предупреждение. Разве это не так должно работать? Если нет, есть ли хороший способ изящно выйти из строя, если сервер кеша недоступен? - person clav; 22.03.2017
comment
Разве это не зарегистрировано Spring? Кэш создается CacheFactory.getObject, который реализует FactoryBean‹Cache›. - person ragnor; 23.03.2017