Oracle Coherence: как установить время ожидания вызова вызова в реплицированном кеше?

У меня есть реплицированный кеш, работающий на нескольких узлах weblogic, на которых также работает OSB. Кэш запускается с сервером в качестве класса запуска. Он имеет очень простой кэш объектов, которые просто отслеживают, используются ли они или нет, с логическим атрибутом «доступен».

Из OSB я делаю вызовы java для того же класса, который вызывает «вызов» в кеше с процессором, который помечает объект как недоступный, а затем запускает Thread.sleep(31000). Это заполнитель для длительной обработки, которую я хочу добавить позже.

Что я хочу, так это то, что если вызов invoke() занимает слишком много времени, процесс должен истечь по времени и вернуть или выдать исключение. Поэтому я пытался настроить тайм-аут запроса в 30000 миллисекунд, чтобы проверить это. К сожалению, я не могу понять, как сделать этот тайм-аут.

Я пытался:

  • Обертывание процессора в PriorityProcessor и вызов setRequestTimeout(30000) перед вызовом()

  • Добавление <request-timeout>30000</request-timeout> к элементу <replicated-scheme/> в конфигурации кеша

  • Добавление <tasktimeout>30000</tasktimeout> к элементу <replicated-scheme/> в конфигурации кеша

  • Добавление <guardian-timeout>30000</guardian-timeout> к элементу <replicated-scheme/> в конфигурации кеша

  • Создание tangosol-coherence-override.xml и добавление тайм-аута guardian-timeout <init-param> к элементу <service>, «тип» которого соответствует «имени» службы в конфигурации кеша.

  • Изменение вызова sleep() на Thread.sleep(310000) просто для того, чтобы посмотреть, не сработает ли какое-либо стандартное значение по умолчанию через 5 минут.

Ни один из них не приводит к тайм-ауту, процессор просто спит столько, сколько я сказал, а затем возвращается без ошибок.

Кто-нибудь делал что-то подобное раньше и может дать мне несколько советов? Это было бы очень признательно.

Спасибо

Джеймс


person James    schedule 16.04.2012    source источник


Ответы (1)


Итак, у меня есть ответ, с некоторой помощью Тима Миддлтона.

По сути, реплицированный кеш не поддерживает тайм-ауты, и оказалось, что он в любом случае не подходит для моей системы!

Решение:

  1. Переключитесь на схему <distributed-cache> в конфигурации кеша.
  2. Добавьте в схему элемент <thread-count> с числом > 1 (я выбрал 10, но это столько параллельных экземпляров, сколько вы хотите поддерживать).
  3. Используйте PriorityProcessor для переноса EntryProcessor и установите время ожидания с помощью setRequestTimeoutMillis() перед вызовом invoke(). (Обратите внимание, что это первое, что я попробовал, но, как оказалось, с неправильным типом кеша)
person James    schedule 18.04.2012