【问题标题】:Java Apache Ignite event listner unexpected behaviorJava Apache Ignite 事件侦听器意外行为
【发布时间】:2020-06-26 09:18:41
【问题描述】:

我玩过 Ignite 微服务示例 https://github.com/dmagda/MicroServicesExample。我添加了一个事件监听器,并明确订阅了特定的缓存

数据节点配置.xml:

<bean class="org.apache.ignite.configuration.IgniteConfiguration">

    <property name="includeEventTypes">
        <util:constant static-field="org.apache.ignite.events.EventType.EVTS_CACHE"/>
    </property>

DataNodeStartup.java:

ignite.events(ignite.cluster().forCacheNodes("vehicles")).remoteListen(locLsnr, rmtLsnr,
        EVT_CACHE_OBJECT_PUT, EVT_CACHE_OBJECT_READ, EVT_CACHE_OBJECT_REMOVED);

但我总是捕捉到另一个缓存“维护”的意外事件。

forCacheNodes("vehicles") 不起作用还是我的配置错误?

更新:

我正在听这样的事件

        IgnitePredicate<CacheEvent> rmtLsnr = new IgnitePredicate<CacheEvent>() {
        @Override
        public boolean apply(CacheEvent evt) {

            System.out.println("Cache event [name=" + evt.name() + ", newValue : " + evt.newValue() + "]");
            return true;
        }
    };

【问题讨论】:

    标签: java events ignite


    【解决方案1】:

    这是预期的行为。如果您想监听来自特定缓存的事件,可以在远程过滤器中进行。

    您的侦听器不只是侦听特定缓存的事件。它从你的缓存所在的节点监听指定类型的所有事件,这不是一回事。

    【讨论】:

    • 你的意思是我应该在 IgnitePredicate apply() 中进行过滤,或者可以在 xml 配置中进行过滤?
    • 它是 Java 代码,所以它会在你的 apply 方法中。
    • 我还要补充一点,连续查询可能更适合用例:apacheignite.readme.io/docs/continuous-queries。使用 CQ,您可以订阅特定的缓存并获得有序更新,保证一次性更新。
    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2020-09-06
    相关资源
    最近更新 更多