Gemfire 客户端区域从服务器获取更新

Gemfire client region to get updates from server

我有一个 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>

当我从客户区域获取值并且密钥在客户端未知时 - 它是从服务器获取的。然而,在那之后,如果服务器值发生变化——即使设置了订阅属性,新值也不会传播到客户端。

这里的错误配置是什么?

要将所有更改推送到您的本地缓存中,您需要删除订阅属性标记,而是在池中保留 subscription-enabled=true,然后以编程方式调用 region.registerInterest API GemFire JavaDoc 实际导致服务器开始向您的客户端发送更改通知。

作为一个很好的起点,我建议

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

这将确保您只收到 "fresh" 个值,并将利用本地缓存进行重复检索,但不会尝试将所有值都放入内存中。但是,兴趣注册有很多选项,因此您需要查阅 javadoc。

作为附加说明,CACHING_PROXY 通常与一些驱逐机制结合使用,以确保本地缓存的大小不会无限增长。

此外,region 标签中的订阅属性实际上适用于服务器端配置,而不是客户端。即使在服务器端,通常也不需要配置订阅属性,因为服务器端区域快捷方式(PARTITION、REPLICATE 等)通常会适当地配置它们。