首页 > 解决方案 > Hazelcast 客户端配置中查询缓存的条目侦听器

问题描述

GitHub 上的 Hazelcast 完整客户端配置示例为查询缓存定义了一个条目侦听器,请参阅 https://github.com/hazelcast/hazelcast/blob/master/hazelcast-client/src/main/resources/hazelcast-client-full.xml

我试过了,但是通过xml配置的入口监听注册似乎被忽略了。使用类 QueryCache 的方法 addEntryListener() 的编程方法工作正常。

在 Hazelcast 文档中,我找不到有关客户端入口侦听器配置的更多信息。

标签: hazelcast

解决方案


您可以为查询缓存提供声明性配置。示例配置如下...客户端或服务器端

<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>

Entry-Listeners:为您的查询缓存条目添加侦听器(侦听器类)。

还要注意...

IMap 事件反映在连续查询缓存中的顺序与它们在映射条目上生成的顺序相同。由于事件是在存储在分区中的条目上创建的,因此事件的顺序是基于分区内的顺序来维护的。您可以使用 EventLostListener 添加侦听器来捕获丢失的事件,并且可以使用 QueryCache.tryRecover() 方法恢复丢失的事件。丢失事件的恢复很大程度上取决于 Hazelcast 成员的缓冲区大小。默认缓冲区大小为每个分区 16;即每个分区可以在缓冲区中维护 16 个事件。如果事件生成量很大,将缓冲区大小设置为更大的数字将提供更好的恢复丢失事件的机会。您可以使用 QueryCacheConfig.setBufferSize() 设置缓冲区大小。您可以将以下示例代码用于恢复案例。


推荐阅读