hazelcast - Hazelcast 客户端配置中查询缓存的条目侦听器
问题描述
GitHub 上的 Hazelcast 完整客户端配置示例为查询缓存定义了一个条目侦听器,请参阅 https://github.com/hazelcast/hazelcast/blob/master/hazelcast-client/src/main/resources/hazelcast-client-full.xml
我试过了,但是通过xml配置的入口监听注册似乎被忽略了。使用类 QueryCache 的方法 addEntryListener() 的编程方法工作正常。
在 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() 设置缓冲区大小。您可以将以下示例代码用于恢复案例。
推荐阅读
- python - 如何将自定义管理器类参数设置为 required=False
- java - 只有最后一个 StackPane 呈现在屏幕上(JavaFX)
- php - 为什么 Html 到 Wordpress 转换的站点在预加载器处停止?
- sql - 由于子查询错误的别名而导致错误更新的返回记录
- arrays - Excel SUMPRODUCT - 如何处理#VALUE!如果数组包含文本则出错
- python - Django REST 框架分页:未找到:GET /api/blog/list HTTP/1.1" 404 0
- javascript - 如何在 Typescript Push 方法中编写 If Else
- javascript - 同一页面上的多个光滑滑块具有相同的类?
- azure - Azure Cosmos Db 中没有分区键的批量删除
- phpstorm - 如何在 PhpStorm 中运行 dev 到远程服务器