我们的应用程序由多个微服务组成。每个微服务都有其自己的 hazelcast 实例的配置。所有 hazelcast 实例形成一个具有分布式数据的集群。 Hazelcast 复制映射用作在这些微服务之间复制数据对象(DTO 包括多个字段)的方式。微服务托管在 AWS 上。
数据对象序列化存在问题,这就是我们使用自定义序列化配置创建单独项目的原因。我们想要复制的所有数据对象(java 类)都列在这个配置代码中。从这个配置项目构建的工件作为 Maven 依赖项包含在每个微服务中。这有助于解决序列化问题。
这个解决方案给我们带来了如果需要添加新数据对象会出现的新问题。首先我们应该将这个数据对象添加到配置项目中,然后重建这个项目。之后,我们应该使用更新的依赖项重建所有微服务并重新部署。如果至少有一个微服务没有重建,就会出现序列化错误,因为这个微服务 hazelcast 实例不知道如何序列化新的数据对象。重建和重新部署所有应用程序的过程对我们来说不太方便。
请分享您的经验!有什么办法可以让它变得更容易吗?
最佳答案
有几种方法可以解决您的问题:
- 为了将新数据类加载到集群,您可以使用
用户代码部署
功能。在 3.8 中,它仅适用于成员(member)。在 3.9 中,它将包括对从客户端加载的支持。以下是更多信息:http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#user-code-deployment-beta - 您还可以拥有一组众所周知的顶级对象,并在需要时进行相应的修改。为了更轻松地对这些对象进行版本控制,您可以使用可移植序列化格式。请参阅以下链接了解更多信息:Portable Serialization & Versioning for Portable Serialization
关于java - Hazelcast 集群 : serialization and replication issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46115104/