GitHub上的Hazelcast完整客户端配置示例定义了查询缓存的条目侦听器,请参见 AllAboutGetline article
我尝试了一下,但是通过xml config的条目侦听器注册似乎被忽略了。使用QueryCache类的addEntryListener()方法的编程方法可以正常工作。
在Hazelcast文档中,我找不到客户端上有关条目侦听器配置的更多信息。
答案 0 :(得分:0)
您可以为查询缓存提供声明性配置。配置示例如下...客户端或服务器端
<map name="myMap">
<query-caches>
<query-cache name="myContQueryCache">
<include-value>true</include-value>
<predicate type="class-name">com.hazelcast.examples.ExamplePredicate</predicate>
**<entry-listeners>
<entry-listener include-value="false" local="false">
com.yourpackage.MyEntryListener
</entry-listener>
</entry-listeners>**
<in-memory-format>BINARY</in-memory-format>
<populate>true</populate>
<coalesce>false</coalesce>
<batch-size>2</batch-size>
<delay-seconds>3</delay-seconds>
<buffer-size>32</buffer-size>
<eviction size="1000" max-size-policy="ENTRY_COUNT" eviction-policy="LFU"/>
<indexes>
<index ordered="true">...</index>
</indexes>
</query-cache>
</query-caches>
</map>
条目侦听器:为查询缓存条目添加侦听器(侦听器类)。
还要注意...
IMap事件以与在地图项上生成事件的顺序相同的顺序反映在连续查询缓存中。由于事件是在分区中存储的条目上创建的,因此事件的顺序将根据分区内的顺序进行维护。您可以使用EventLostListener添加侦听器以捕获丢失的事件,并可以使用QueryCache.tryRecover()方法恢复丢失的事件。丢失事件的恢复很大程度上取决于Hazelcast成员上缓冲区的大小。默认缓冲区大小是每个分区16;即每个分区可以在缓冲区中维护16个事件。如果事件生成很高,则将缓冲区大小设置为较大的数字将提供恢复丢失事件的更好机会。您可以使用QueryCacheConfig.setBufferSize()设置缓冲区大小。您可以将以下示例代码用于恢复案例。