首页 > 解决方案 > Hazelcast 客户端和地图存储的不同(反)序列化

问题描述

我正在使用以下上下文运行 hazelcast 成员和客户:

Hazelcast 客户,坚持不懈的会员 如上图所示:

  1. 我希望客户控制(反)序列化,并在没有 hazelcast 成员参与序列化业务的情况下加入新客户。
  2. 想要基于命名约定使 Hazelcast Map 持久化,例如所有具有“*Store”匹配模式的地图,需要持久化到 cassandra db。
  3. 由于我选择以二进制格式保存,我希望将存储在 hazelcast 中的相同 byte[] 提供给 mapstore 接口。

我的问题是 - hazelcast 似乎在调用 mapstore .store() 方法之前应用了反序列化器,并在服务器端查找具有原始存储 typeId 的序列化器类。合乎逻辑的解决方案是,如果我的 mapstore 类型是 byte[],hazelcast 不会为 mapstore 应用反序列化器,或者让我定义反序列化器,无论 typeId 是什么都可以工作。看起来两者似乎都不可能。

非常感谢任何解决该问题的想法。

标签: cachingserializationdeserializationhazelcast

解决方案


在默认情况下(内存格式设置为 BINARY)序列化和反序列化仅在客户端发生。但是,您使用的 MapStore 需要 Hazelcast 向MapStore.store方法提供实际的条目对象,因此需要在服务器上进行反序列化。否则,您只会在 MapStore 中收到一个 byte[]。


推荐阅读