Hazelcast JCache Listener正在序列化?

时间:2018-09-19 11:57:34

标签: spring-boot hazelcast jcache

我有两个spring-boot服务,它们通过缓存层相互通信(由于与问题无关的原因)。我正在使用JCache(jsr-107)api抽象出实际的缓存提供程序,在这种情况下为Hazelcast。我正在手动注册一些缓存事件侦听器(update,create和delete)并使用这些事件来执行某些操作。

一个简单的用例是service A消耗CacheEntryUpdatedListener事件,该事件是通过将某些数据推送到特定的缓存而创建的。当我开始service B时。它可以正确启动并创建自己的Hazelcast群集节点。当service A尝试加入该Hazelcast节点时,它会正确找到它,但立即断开连接,而我得到一个service B,MarketStateRefreshListener是一个缓存事件侦听器,为什么Hazelcast会尝试将其持久化,这些监听器在java.io.NotSerializableException:c.i.c.e.i.b.ws.m.cache.listener.MarketStateRefreshListener之外毫无意义,将它们保存到IMDG没有意义吗?我是否从根本上误解了Hazelcast集群如何工作?

这是hazelcast配置(两个服务都使用):

service B

我正在使用JCache,因此更新缓存事件由<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.10.xsd" xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <group> <name>cache_group_name</name> </group> <network> <port>5701</port> <join> <multicast/> </join> </network> <cache name="cache_name_1"> <!--<management-enabled>true</management-enabled>--> <!--<backup-count>3</backup-count>--> </cache> <cache name="cache_name_2"/> <cache name="cache_name_3"/> </hazelcast> 实例处理。这样的一类是:

javax.cache.event.CacheEntryUpdatedListener

偶数侦听器是spring @Component,@Slf4j @Component @AllArgsConstructor public class MarketSummaryStateUpdatedListener implements CacheEntryUpdatedListener<String, MarketSummaryState> { private CacheEventService eventService; @Override public void onUpdated(Iterable<CacheEntryEvent<? extends String, ? extends MarketSummaryState>> events) throws CacheEntryListenerException { events.forEach( event -> { eventService.fireEvent(MARKET_STATE, event.getEventType(), EventData.of(event.getValue())); }); } } 也是

致谢,
彼得

0 个答案:

没有答案