我在以下上下文中运行hazelcast成员和客户端:
我的问题是-hazelcast似乎在调用mapstore .store()方法之前应用了反序列化器,并在服务器端查找了具有原始存储的typeId的序列化器类。合理的解决方案是,如果我的地图存储类型为byte [],则hazelcast不对地图存储应用反序列化器,或者让我定义反序列化器,无论typeId如何,该解串器都可以使用。看起来两者似乎都不可能。
任何解决问题的想法都将受到赞赏。
答案 0 :(得分:0)
默认情况下(内存格式设置为BINARY)仅在客户端进行序列化和反序列化。但是,您使用的MapStore要求Hazelcast向 MapStore.store 方法提供实际的输入对象,从而在服务器上进行反序列化。否则,您只会在MapStore中收到byte []。
答案 1 :(得分:0)
@kiran,
@wildnez的答案中的一些补充:
通常,如果您拥有Pojo并使用MapStore,则成员还需要了解Pojo。但是在您的情况下,由于您可以使用byte []正常运行,因此可以从客户端将条目存储为byte [],这意味着您的IMap必须是IMap。这样,成员将不值得进行任何反序列化。因此,您将手动进行序列化并将byte []存储到Hazelcast IMap中。另外,您可以为成员和客户端定义不同的序列化器/反序列化器,对于这些类,您始终可以在成员上返回byte []。我个人更喜欢第一个解决方案。
为*Store
映射定义通配符IMap配置,并放置通用MapStore实现。通过实现MapLoaderLifecycleSupport
,您还可以根据需要在MapStore中获取地图名称。请参阅http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#storing-entries-to-multiple-maps
如果您的地图是IMap,则您还将在MapStore中获得byte[]
,如1中所述。