不使用通用 dto 时的 hazelcast 序列化

问题描述 投票:0回答:2

我的场景:

1.) 将 quarkus 应用程序与 hazelcast 分开

2.) 另一个 quarkus 应用程序作为 hazelcast 客户端,从应用程序 1 读取来自 hazelcast 的数据

我不想在公共库中拥有共享对象以避免服务耦合

当我将 dto 类写入 1. 并想在 2 上读取它时,我得到类未找到异常...但我在同一包下的两个应用程序中都有相同的类。如果我将类放在单独的 mvn 模块中并在两个项目中导入该模块,它可以正常工作,但我想避免该源 od cuppling

关于如何解决这个问题有任何提示吗?

serialization hazelcast
2个回答
0
投票

你不能期望 Java 反序列化一个它不知道的对象。

不过还有其他选择

  1. 使用 SQL 绑定

这是通过在数据结构上创建映射来实现的。然后您可以使用 Hazelcast SQL 方言来访问数据结构。这样你的Java客户端就可以执行SQL语句了。

参见 https://docs.hazelcast.com/hazelcast/latest/sql/mapping-to-maps

  1. 使用通用记录

这是通过使数据结构将数据存储为 GenericRecord 类型来实现的。您可以通过字符串常量访问这些字段。看 https://docs.hazelcast.com/imdg/latest/clusters/accessing-domain-objects


0
投票

即使类名和包看起来相同,也会由于字节码的差异而出现 ClassNotFoundException。为了解决这个问题,您可以使用 JSON 或 Protobuf 等格式,而不是依赖 Java 的默认序列化。 Hazelcast Portable 序列化也是一种选择。

© www.soinside.com 2019 - 2024. All rights reserved.