2015-07-01 2 views
1

У меня есть сервер регион Gemfire (распределенный) и локальная область (кэширующий прокси), сконфигурированный таким образом:Gemfire клиент области для получения обновлений с сервера

<client-cache> 
<pool name="client" subscription-enabled="true">  
    <locator host="localhost" port="13489" /> 
</pool> 

<region name="customers" refid="CACHING_PROXY"> 
    <region-attributes> 
     <subscription-attributes interest-policy="all"/> 
     <!--<subscription-attributes interest-policy="cache-content"/>--> 
    </region-attributes> 
</region> 
</client-cache> 

Когда я получаю значение из области клиента и ключ неизвестен на клиенте - он извлекается с сервера. Однако после этого, если значение сервера изменяется - новое значение не распространяется на клиент, даже если атрибуты подписки установлены.

Какая информация неправильная конфигурация?

ответ

3

Чтобы все изменения были внесены в ваш локальный кеш, вам нужно будет удалить тег атрибутов подписки, а вместо этого оставьте в пуле атрибут enabled-enabled = true, а затем программным путем вызовите region.registerInterest API GemFire JavaDoc, чтобы фактически вызвать сервер для отправки уведомлений об изменениях вашему клиенту.

В хорошей отправной точкой, я хотел бы предложить

region.registerInterestRegex(".*", InterestResultPolicy.NONE, false, false)

Это гарантирует, что вы получите только «свежие» ценности и воспользоваться локальной кэш-памяти для повторных извлечений, но не будет пытаться поставить все значения в памяти. Тем не менее, существует множество вариантов регистрации процентов, поэтому вы захотите проконсультироваться с javadoc.

Как дополнительное примечание, CACHING_PROXY часто сочетается с некоторым механизмом выселения, чтобы гарантировать, что размер локального кеша не растет бесконечно.

Кроме того, атрибуты подписки внутри тега региона применяются на стороне сервера, а не на стороне клиента. Даже на стороне сервера нет необходимости настраивать атрибуты подписки, потому что ярлыки области на стороне сервера (PARTITION, REPLICATE и т. Д.) Обычно настраивают их соответствующим образом.

+0

Спасибо. Могу ли я также предположить, что клиент получит события для каждого ключа в регионе, даже те, которые никогда не сохранялись/не нужны на этом клиенте? – Vic

+0

Да. Клиент получит событие навсегда для обновления кеша. Получает ли он фактическое значение и сохраняет его в кеше, будет зависеть от последнего параметра registerInterest, но в любом случае вы получаете событие (если у вас есть CacheListener в области, который он будет запускать). –

 Смежные вопросы

  • Нет связанных вопросов^_^